SSH隧道

1 SSH概述

    SSH(Secure Shell)是一种用于在非安全网络中执行远程登录,和安全执行其他网络服务的加密网络协议。SSH使用C/S架构在SSH Server和SSH Client之间提供安全通道。SSH最常用的功能是远程登录,以及远程执行命令。但是其他网路服务也可以通过SSH进行加密,最直接的方式是通过端口绑定,SSH 将起一个socket监听被绑定端口,并将该端口上的数据转发到SSH上。关于SSH的详细介绍可以参考 维基百科。本文主要讲解除了远程登录,执行command外另一个非常有用的功能隧道(Tunneling)。

2 隧道

       在计算机网络技术中,隧道技术允许用户在未直接提供某种网络服务的网络中访问/提供该网络服务。隧道的一个重要用途是在一个不直接支持某种网络协议的网络中运行该网络协议,如在IPV4上提供IPV6支持;隧道的另一个重要用途是解决某些服务在当前网络中执行可能不安全或不切实际的问题。如,为一个远程用户提供一个本地可访问地址,而该用户的实际物理地址不在本地可访问地址范围内。另外,由于通过隧道的数据包一般都会被打包成一种另外的格式,并被加密,所以隧道还有保护原始数据的功能。隧道的详细介绍可以参考 维基百科。

3 SSH隧道

SSH隧道是SSH protocol创建的一个加密隧道。SSH隧道有两种情况,一种是在本地建立的网络服务到SSH的加密链接,另一种是本地主机与远程主机间建立的安全链接。第一种功能由SSH动态端口绑定提供;第二种功能可由SSH本地端口转发或远程端口转发提供。

3.1 SSH端口绑定

SSH提供-D选项绑定一个“dynamic“应用层端口到SSH。SSH将分配一个socket监听该端口,如果该端口上有链接,则该链接上的数据将被转发到安全通道。

3.2 SSH本地端口转发

SSH本地端口转发顾名思义就是建立一个本地主机到远程主机的端口转发。在实际使用环境中,为了做到网络隔离,通常会有一个工作网络,一个实验网络环境的情况,工作网络和实验网络中的主机相互不能访问。但是实际使用中,为了方便,往往需要直接在工作网络中的主机上直接访问操作实验网络环境的主机。所以这时引入一台jump server既能访问工作环境,又能访问实验环境。建设工作环境中的主机是host1,实验环境中主机是host2,jump server是host3. 如果需要从host1访问host2,首先需要从host1远程登录到host3上,再从host3登录到host2上进行操作。 依然很麻烦,但是SSH隧道可以直接通过host3在host1和host2之间建立隧道连接,直接从host1就可以访问到host2. 
建立隧道的具体方式为:
$ ssh -L [bind_address:]port1:host2:port2 host3
该命令的意思是将[bind_address](默认为本机地址)的端口port1通过host3链接到host2的port2上。
例如:
$ ssh -L 55522:host2:22 -N user@host3
将本地的55522端口绑定到host2的22端口上,则在本地执行如下ssh命令可以直接使用用户名user2远程登录到host2.
$ ssh user2@localhost -p 55522
SSH隧道_第1张图片

3.3 SSH远程端口转发

SSH远程端口转发类似于本地端口转发,但应用环境稍有不同。由于种种原因host3和host2之间可以相互访问,但是host3和host1之间的访问是单向的,host3可以访问host1,host1不能访问host3. 此时要使host1可以访问host2,或者host2访问host1,使用本地端口转发已经不能满足需求,只能使用远程端口转发。在host3上执行端口转发命令,建立host1与host2之间的SSH隧道。
执行端口转发的命令为:
$ ssh -R [bind_address]: port: host2: host2port host1
该命令的意思是:在host1上起一个socket监听port,如果有链接,则就数据经过host3转发到host2的host2port端口上。

4 总结

SSH在实际使用中,功能很强大。平时我们经常用到的功能是SSH数据加密的功能,执行远程登录,以及执行命令。本文简要的介绍了SSH另一个强大,而且实用的功能——端口转发(又称为SSH隧道)。该功能通过建立本地端口转发,远程端口转发或者动态端口帮地可以实现防火墙渗透,以及在未直接连接的网络间建立TCP连接。有兴趣的可以查阅相关资料详细研究这些功能,灵活使用这些技巧,将对日常工作有很大帮助。

5 参考资料

  1. Secure Shell in Wikipedia : https://en.wikipedia.org/wiki/Secure_Shell
  2. Tunneling Protocol in Wikipedia: https://en.wikipedia.org/wiki/Tunneling_protocol
  3. 实战SSH端口转发: http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html
  4. 阮一峰:SSH原理与运用(二):远程操作与端口转发 http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html

你可能感兴趣的:(linux,ssh)