Chinaunix首页 | 论坛 | 博客
  • 博客访问: 537524
  • 博文数量: 120
  • 博客积分: 3991
  • 博客等级: 中校
  • 技术积分: 1113
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-31 15:57
文章分类

全部博文(120)

文章存档

2011年(3)

2010年(6)

2009年(111)

我的朋友

分类: 系统运维

2011-04-19 15:18:08

简介
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情况下数据交换示意图

具体流程如图所示:
  1. 机器A,运行Remote Forward命令,建一个条机器A与SSH服务器的安全加密通道。
  2. 然后,SSH程序在SSH服务器B上,绑定个端口,如:2202,并监听它。
  3. 机器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。
  4. SSH程序把端口2202监听到的数据经由,第一步建立的加密通道(图3中红色管道)传给机器A,如箭头3,4。
  5. 最后由机器A,把数据转到目标机器上的指定端口,这里就是机器A本身的SSH端口22。
Remote Forward 端口的安全问题
当你在服务器B,打开一个监听端口,同样问题来了,这个端口,允许哪些机器来联接。SSH程序的默认设置是不允许除了本机外的IP使用这个端口。如果你想让别的机器也能连接这个端口,你需要在/etc/sshd_config文件中打开:GatewayPorts yes 选项。这是唯一的办法。
参考文献
阅读(9624) | 评论(1) | 转发(0) |
0

上一篇:SSH的 Port Forwarding —— Local Forwarding

下一篇:没有了

给主人留下些什么吧!~~

从火星归来06152015-10-20 13:16:35

很受用,但是图片链接失效了哦~