简介
SSH的的Port Forward,中文可以称为端口转发,是SSH的一项非常重要的功能。它可以建立一条安全的SSH通道,并把任意的TCP连接放到这条通道中。本文仔细 讨论SSH的这种非常有用的功能, 上文已经介绍了Port Forward的Local Forward功能,这篇将要介绍是的Remote Forward功能。
Remote Forward
所谓的Remote Forward,也就是远程转发,意思就转化Remote端,也就SSH服务器上的端口。首先我们要搞清楚,Remote Forward与Local Forward的区别在在哪里。什么时候用Remote Forward,什么时候用Local Forward,如果搞清楚这两个问题,你就可以说了解了SSH的Port Forward了。
图1. 典型的local Forward 示意图
机器A与SSH服务器B可以互相访问,SSH服务器与目标服器C可以互相访问,但是A不能与C互想访问。在机器A上把 一个本地端口,比如:2202,通过SSH服务器转发(Forward)到服务器C的21号端口。整个过程,相当于在原来并不相通的A和C之间建立了一个 从A机器2202端口到C机器21端口可以互相讯问的通道,所以SSH的Port Forward也叫做SSH Port Tunnels,非常形象。
接着来看看Remote Forward的情况:
图2. 典型Remote Forward情况示意图
办公室本地(local) 机器A,一般都在防火墙后面,防火墙一般让出不让进,所以机器A可以访问SSH服务器B,如果家里的机器C,开着的话,也可以访问机器C。但是服务器B和 机器C都没有办法直接访问机器A。而我们在家里有时希望能够SSH到办公室机器A。这种情况下,就要使用SSH的Remote Forward功能了。
机器A是本地(local)机器,也就是说在机器A运行SSH程序进行Port Remote Forward。
- 方法1. 在机器A的
~/.ssh/config
文件中加入: Host home-with-tunnel
Hostname ssh.b.com
RemoteForward 2002:a:22
User tom 然后运行: tom@a ]$ ssh home-with-tunnel
tom@ssh.b.com's password: ******** - 方法2. 使用SSH命令行参数: sptom@a ]$ ssh -N -f -R 2202:a:22 ssh.b.com
-f
使得SSH到服务器B后,就转入后台运行。
-N
使得连到SSH服务器B后,一直维持这个连接。
-R
是Remote Forward的参数选项
2202
是Remote服务器上,要被Forward的端口,这个端口将会被SSH程序绑定到这个连接上。
a:22
是我们希望联到的目标机器的名字或者IP,冒号后是希望连到目标机器的端口。端口22一般是SSH服务用的。
当我们完成上面任意一种方法以后,回到家中,当我们希望能从家里机器C,连到机器A时,我们只要先连到SSH服务器B上:
tom@c ]$ ssh ssh.b.com
tom@ssh.b.com's password: ********
tom@ssh.b.com ]$ 因为SSH服务器上的端口2202已经被Remote Forward到a:22上了。所以
tom@ssh.b.com ]$ ssh -p 2202 localhost
tom@localhost's password:***********
tom@a] 可见,在机器A上运行SSH的Remote Forward,建立了一条,从机器C通向机器A的通道。正如图2中红线标示的一样。正是因为存在这样单向访问的网格,所以需要Remote Forward的功能存在。 机器C,通过访问服务器B的上已经被Forward的端口2202,与机器A进行交流。
图3. Remote Forward情况下数据交换示意图
具体流程如图所示:
- 机器A,运行Remote Forward命令,建一个条机器A与SSH服务器的安全加密通道。
- 然后,SSH程序在SSH服务器B上,绑定个端口,如:2202,并监听它。
- 机器C,登陆到服务器B上,连接localhost的端口2202。 tom@c ]$ ssh ssh.b.com
tom@ssh.b.com's password: *********
tom@bssh.b.com ]$ ssh -p 2202 localhost 如图3,箭头2。 - SSH程序把端口2202监听到的数据经由,第一步建立的加密通道(图3中红色管道)传给机器A,如箭头3,4。
- 最后由机器A,把数据转到目标机器上的指定端口,这里就是机器A本身的SSH端口22。
Remote Forward 端口的安全问题
当你在服务器B,打开一个监听端口,同样问题来了,这个端口,允许哪些机器来联接。SSH程序的默认设置是不允许除了本机外的IP使用这个端口。如果你想让别的机器也能连接这个端口,你需要在/etc/sshd_config
文件中打开:GatewayPorts yes 选项。这是唯一的办法。
参考文献
阅读(9696) | 评论(1) | 转发(0) |