Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1628321
  • 博文数量: 185
  • 博客积分: 10363
  • 博客等级: 上将
  • 技术积分: 2205
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-11 22:29
文章分类
文章存档

2013年(12)

2012年(5)

2011年(2)

2010年(12)

2009年(9)

2008年(15)

2007年(48)

2006年(82)

分类: LINUX

2009-02-11 17:44:36

一。简介: 

      大多数人知道SSH是用来替代R命令集,是用于加密的远程登录,文件传输,甚至加密的 
      FTP(SSH2内置), 因此SSH成为使用极广的服务之一,不仅如此,SSH还有另一项非常有 
      用的功能,就是它的端口转发隧道功能,利用此功能,让一些不安全的服务象POP3, 
      SMTP,FTP,LDAP等等通过SSH的加密隧道传输,然后,既然这些服务本身是不安全的, 
      密码和内容是明文传送的,现在其它中间媒介也没无监听了。 

      二。图示: 

      SSH的加密隧道保护的只是中间传输的安全性,使得任何通常的嗅探工具软件无法获取发 
      送内容。如下图: 
      假设客户机和服务器都运行Linux,且以POP3为例。 


           C (pop3 server: S)              S 
        _______                         ________                 
        |     |                         |      | 
        |     |________POP3___________ >|      | 
        |_____|                         |______| 
                  (图一:正常的POP3) 


      (图一:正常的POP3) 


           C (pop3 server:C)               S (pop3 client: S) 
        _______                         ________                 
        |     |                         |      | 
        |     |--------SSH连接--------->|      | 
        |_____|                         |______| 
         
         
      (图二:SSH隧道后的POP3) 
       

      如图一: 正常的POP3连接是客户C向服务器S进行连接,C的设置是POP3服务器为S。 
      如图二: 用SSH隧道的话,客户C设置pop3服务器为自己(localhost),然后设置SSH加密 
      隧道 
      ,如果设置在同样的端口110听取C的请求,则对C来说,pop3服务器是自己本身,端口也 
      是110 对S来说,看到的pop3请求地址不是来自C,而也是自己本身,因为有了SSH隧道。 



      三。SSH隧道设置 

      1. 首先必须在C和S上安装SSH,确保SSH首先能工作。 
      2. 我们用简单的一个命令如下: 

      # ssh -C -P -f sshaccount@S -L 110:S:110 sleep 7200 

      解释如下: 
      -C 使用压缩功能,是可选的,加快速度。 

      -P 用一个非特权端口进行出去的连接。 

      -f 一旦SSH完成认证并建立port forwarding,则转入后台运行。 

      sshaccount 客户C在服务器S上的SSH连接帐号 

      -L 110:S:110 转发C对本地端口110的连接到远程服务器S的110端口。 
      也可以用高端端口(普通用户使用,因为普通用户不能在低于1024的端口上建立SSH隧道) 
      如果用高端端口,如:-L 1110:S:110,这样任何用户都可建立这种加密隧道。 

      sleep 7200 一般用于script,必须给一个命令,我们给一个sleep等待空 命令,这里为 
      2小时,你可以 
      设为更长用于保持整个连接过程, 如 sleep 100000000 。 

      四。检验 

      设置后你就可以在客户C上用 # telnet localhost 110 命令而连到 S 上收取email, 
      而整个过程也被加密。 

      五。其它常见问题: 

      1. 每次启动该命令时需要输入密码以验证SSH连接,你也可以用RSA键对的方法自动化 
      SSH连接。 
      看文章荟萃中的另一篇文章《如何在两台linux服务器之间用RSA键对的方法SSH/SCP不需 
      密码》 

      2. 如果你希望上面的命令永远保持运行状态,你可以用如下的scripts. 
      #!/bin/sh 
      while [ 1 ] ; do 
      ssh -C -P -f sshaccount@S -L 110:S:110 sleep 7200 
      sleep 1 
      done 

      3. 你可以在一个命令中用多个L 参数 ,如 -L 1110:S:110 -L 225:S:25 -L 
      389:S:389


范例:
1、将远程端口带到本地
ssh -C -N -P -f -p 2222 root@192.168.1.1 -L 0.0.0.0:11009:192.168.5.1:11009 sleep 600000000
2、将本地端口带到远程
ssh -C -N -P -f -p
2222 root@192.168.1.1 -R 0.0.0.0:11010:192.168.1.190:80 sleep 600000000
阅读(3468) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~