ssh的各种Port Forwarding

(原创文,谢绝转载)

作为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了。

    原文作者:DUNT
    原文地址: https://www.jianshu.com/p/3af56cde0337
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞