如今有三臺主機:nginx
PI@home :家庭服務器web
Admin@server : 公網服務器服務器
My@office :公司的主機dom
如今來實如今公司主機上登陸家庭服務器。ssh
首先,先確保三臺主機均有相應的權限可以登陸及其餘操做。tcp
接下來,在家庭服務器上用SSH反向代理鏈接上公網服務器:代理
PI@home:$ ssh -NfR 2222:localhost:22 Admin@server
ssh參數:
-N:不執行何指令
-f:後臺執行
-R:創建reverse tunnel調試
建議經過進程守護來確保反向代理服務的正常,例如autossh
,而且在Admin@server存放PI@home的SSH公鑰,這樣自動登陸時就無需輸入登陸密碼了code
此時登陸公網服務器,查看代理反向代理是否生效server
Admin@server:$ netstat -tnl | grep 127.0.0.1
看到2222端口已啓用,說明已經生效
tcp 0 0 127.0.0.1:2222 0.0.0.0:* LISTEN
此時便可從公網服務器反向登陸回家庭服務器了
Admin@server:$ ssh PI@127.0.0.1 -p 2222
那麼公司主機要登陸家庭服務器,只要先登陸到公網服務器,在作上述登陸操做便可了。
相關連接:Reverse SSH Tunnel實際運用,搭配auotssh永不斷線,putty創建反向tunnel
一樣的原理也能夠實現從公網訪問局域網的web服務。
一樣是在局域網服務器使用SSH反向代理
PI@home:$ ssh -NfR 2280:localhost:80 Admin@server
注意,此次映射的端口是80
而後在公網服務器上開個一樣域名的web服務,而後轉發到2280端口,以nginx爲例:
server { listen 80; server_name your_domain; #域名設置必須跟家庭服務器上的一致 location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:2280; } }
這樣在公網上訪問域名,就會自動代理到家庭服務器上面去了。
我就是經過這種方式在本地來調試第三方服務通信的。