經過SSH反向代理,遠程登陸局域網主機

如今有三臺主機: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;
    }
}

這樣在公網上訪問域名,就會自動代理到家庭服務器上面去了。

我就是經過這種方式在本地來調試第三方服務通信的。

相關文章
相關標籤/搜索