早就听说过ssh反向隧道,却一直没有尝试过,今日偶得之,简单做个记录。
ssh反向隧道可以解决这样的场景:
比如在公司内部都是局域网,但是我想从公司外访问公司内的机器,该怎么办呢?当然了,vpn肯定没问题,但更快捷的方式就是ssh反向隧道。
为了简单明白,下面示例如何使用:
公网有台机器叫public,内网有台机器叫private,现在要实现从public到内网的访问,一条命令即可搞定。
在private上执行: ssh -NfR2222:localhost:22 root@public
在public上确认:root@public:~# netstat -tnl| grep 2222
tcp 0 0 127.0.0.1:2222 0.0.0.0:* LISTEN
在public上登陆private:root@public:~# ssh root@127.0.0.1 -p 2222
解释ssh参数:
-N:不执行何指令
-f:后台执行
-R:建立reverse tunnel
进一步简化操作:
上面不方便的地方是,每次要在外面登陆内网,都需要先登陆到public上,再从public上登陆内网,如果可以类似网页代理,我在任何地方都可以直接登陆内网那不就完美了,别急,还真可以。
在public上执行下面的命令:
root@public:~# ssh -g -L 9099:localhost:2222 localhost
即将本地9999端口映射到本地2222端口,2222端口在之前已经映射到了private,那么,hahaha
在公司外任何一台机器上执行:
ssh root@public -p 9099输入private机器的密码即可登陆到private这台机器上。
还有个autossh工具,它可以帮助断线后自动重连,需要的时候可以研究研究。