如今有三台主机: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; } }
这样在公网上访问域名,就会自动代理到家庭服务器上面去了。
我就是经过这种方式在本地来调试第三方服务通信的。