(原创文,谢绝转载)
作为Linux系统中自带的工具ssh,功能很强大,大家喜闻乐见。除了将ssh作为远程管理工具外,其Port Forwarding功能也是很有趣的,下面将通过三个例子来详细解说ssh的Port Forwarding 功能。
Local Port Forwarding
简单的说,就是
ssh本地端口->ssh服务器->远程端口
举个例子,我在家里的电脑A面前,能连上公司的服务器B,公司的服务器B能连上公司内网的服务器C。外网是无法直接访问C的mysql(端口3306),我在家里想访问C的数据库,于是我在A上设置
ssh -L 3000:address.of.serverC:3306 usr@address.of.serverB
输入管理员同志私底下给你的serverB的密码后
再使用mysql -hlocalhost -p3000 -uuser -ppassword就能访问C的数据库鸟。
也就是说,通过Local Port Forwarding, 使得我们跟localhost:3000交流与跟serverC:3306交流的效果是一毛一样的。有点像虫洞或者缩地之术啥的。
Remote Port Forwarding
大概是这么个意思:
老板A的电脑->ssh服务器端口->你的本地端口
举例子,公司里的老板想看看你在家里弄数据库弄得怎样了,可是你家里电脑A没有公有IP地址,还好你控制着一个有公网ip的服务器B。3306是本地数据库的端口,于是,你使用了
ssh -R 3000:localhost:3306 user@serverB
你老板在电脑C上访问serverB:3000跟在电脑前访问localhost:3306一毛一样。而且mysql的root用户也可以远程登录了。
Dynamic Port Forwarding
跟Local Port Forwarding差不多,区别是不用指定目标机和端口了,由连上来的应用决定目标和端口。
举个例子,你从前不让员工用公司的网络上外网,当然就你的某个电脑A能上外网。某天你大发慈悲了,决定让员工也能上上网。你决定用自己的电脑A做个代理,让员工通过你的电脑上网,于是,你输入
ssh -D 8080 me@myserver
员工在浏览器中设置好代理服务器 myserver:8080 就能上上网啥的。
注意事项
连不上端口用netstat -antp 查看ssh服务器,是不是127.0.0.1连着端口,这个ip是就没法从远程访问的。要从远程访问ssh转发的端口就需要设置/etc/ssh/sshd_config, 在最末加一句GatewayPorts yes。重启ssh服务。127.0.0.1变成0.0.0.0就OK了。