OpenSSH在实现时,给我们提供一个简单好用的Geek功能——端口转发。说是一个功能,其实是两个用法,一称之为本地端口转发,一称之为远程端口转发。
SSH端口转发其实就是类似iptables的端口数据转发功能,也即是将请求在某一个指定端口的数据,转发到另外一个指定的端口上。呵呵,很抽象啊~
下面说具体的用法:
下文的两个注解:本地:指执行SSH命令的发起端;远程:SSH命令的连接端。执行命令的环境要基于*nix或者是可以实现SSH命令效果的工具(如putty相关),服务所在的环境不限服务类型、不限操作系统。
SSH端口转发之一:本地端口转发
本地端口转发是指通过SSH命令,在本地服务器Listen一个端口(如8000),然后将访问这个端口的数据请求,转发到远程服务器的某一个服务端口上(如3306)。
有人也许会说废话,难道我不能直接连接么?还用你这个?
其实这个有两个场景也许你没有想到:1、当需要数据加密传输时;2、当服务端口只能通过跳板机不能直接访问时,如有些主机是没有外网IP的。这两个场景,直接连接是不可以的。
举例说明:
假设我有本地虚拟机host1(192.168.1.100)工作机器,服务器host2(54.100.1.2)用作跳板机,服务器host3(10.0.0.9)上面部署得有MySQL服务(端口为3306)。host3是对外不开放。host1与host2可以通过ssh直连。host2与host3之间局域网,防火墙互通。
当我在host1上面的web服务器想访问host3上面的MySQL服务时,直接访问是肯定不行的。因为不通。此时,我们就可以通过SSH的端口转发功能实现。
在host1上面执行如下命令:
#ssh -CNfg -L 8000:10.0.0.9:3306 dbfen@54.100.1.2
然后输入host2上dbfen账号的SSH密码。此时,我们在host1上,通过访问本地的192.168.1.100:8000端口,即是访问的host3上面的3306端口。host3上的MySQL授权,针对host3(10.0.0.9)进行授权即可。
因为是通过的SSH长链接,这样就可能达到数据的转发及数据的加密传输。
怎么样?是不是非常赞~
PS:大家用的myentunnel翻墙工具,就是用的plink工具来实现的本地端口转发~~~
SSH端口转发之二:远程端口转发
远程端口转发是指通过SSH命令,在远程服务器Listen一个端口(如8000),然后将访问这个端口的数据请求,转发到本地的某一个服务端口上(如3306)。
跟本地端口转发刚好反着~
举例说明:
假设我有本地虚拟机host1(192.168.1.100)工作机器,服务器host2(54.100.1.2)用作跳板机,公司开发机host3(192.168.117.100)上面部署得有MySQL服务(端口为3306)。host3是开发机,无公网IP,可访问外网。host1与host2可以通过ssh直连。host3可以直连上host2。
现在我在家里,当我想访问公司的开发机时,开发、测试时,抠门的老板又没有部署VPN,绝逼是不可能的。。。是的。。。不可能的。。。可是该死的老板(小编别让DBfen老板看见了哈)又要求解决问题~~~泪奔啊~~~苦逼的攻城狮~~~肿么办~~~难道要我半夜爬去公司吗??????
天不灭我!我有SSH远程端口转发!
在离开公司前,在公司开发机host3上执行命令如下:
#ssh -CNfg -R 8022:192.168.117.100:22 dbfen@54.100.1.2