用了ssh这么久,今天才知道ssh还有这么强大的功能,穿透内外网,来去自如;其实最重要的还是方便平时工作中的调试,在此简单的记录一下。
使用条件
一台拥有ssh端口连接的外网linux服务器
本地转发
场景:公网有一台服务器的公网ip,ssh端口(已修改为2012)没有对外开放,本地想直接连接此端口,可以通过公网一台开放ssh端口的服务器跳转过去ssh -p 2012 -CNg -L 2222:namenode:2012 nsxq@1.2.3.4
将namenode服务器的2012端口通过1.2.3.4服务器映射到本地2222端口 ssh -p 2222 localhost 即可连接
-p 指定跳转机端口
-L 本地转发
远程转发
场景:本地开发环境需要被外网访问,之前一直使用花生壳,ngrok之类的程序;现在只需要本地执行一条ssh命令,将本地的端口映射到一台外网的服务器上去
将本地内网192.168.1.5:80 映射到1.2.3.4服务器的8888端口,访问1.2.3.4:8888 即可访问192.168.1.5:80 内容ssh -p 2012 -CNfg -R 0.0.0.0:8888:192.168.1.5:80 nsxq@1.2.3.4
打开1.2.3.4服务器需要sshd_config 配置中的GatewayPorts yes
记得顺手打开防火墙端口
-p 指定跳转机端口
-R 远程转发ssh -CNfg -R 0.0.0.0:3306:10.71.36.123:3306 dczf@10.71.36.121
在10.71.36.123上执行此命令,将10.71.36.123的3306映射到10.71.36.121的3306端口
动态转发
场景:相对于上边两种单一端口转发,此功能就是在本地启动一个端口,其他机器可以设置代理,通过此端口进行流量转发(俗称翻墙)。ssh -D 5000 nsxq@1.2.3.4
我这里没有能上google的服务器,没法测试,按道理来说,其他机器就可以将代理设置为1.2.3.4:5000 进行商上网了
参考资料
[实战ssh端口转发]http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/
[SSH的三种端口转发(Port forwarding)/ 隧道协议概要]https://blog.twofei.com/528/