使用SSH进行端口转发

多数情况下,ssh作为一个安全终端来进行使用。但SSH也提供了隧道功能,配合sshd守护进程,可以实现TCP端口转发等强大功能,可以实现保护通信数据,实现反向突破防火墙限制等功能。

1 ssh的一般使用
ssh -p 22 -l root 192.168.1.1  
连接远程ssh服务器,-p指定端口,-l指定登录用户名
其他选项说明
-f 指定ssh在后台运行
-i 指定证书文件
-o 指定选项明细,可用ssh_config来定义

2 本地转发
ssh -L [bind-addr:]port:host:hport sshd-host
其作用是创建一个绑定在bind-addr:port上的socket,同时创建一个到sshd-host上的数据连接,当有数据到达socket上时,将数据加密并通过数据连接发送到sshd-host并进行解密,然后转发到host:hport。返回的数据则按原路送回。
示例: $ ssh -L 7001:localhost:389 LdapServerHost
使用SSH进行端口转发_第1张图片

3 远程转发
ssh -R [bind-addr:]port:host:hport sshd-host
其作用是通知远程的sshd-host,创建一个绑定在bind-addr:port上的socket。同时本机的ssh-client创建一个到sshd-host的数据连接。这样当绑定的socket上有数据到达时,sshd-host将数据进行加密,并通过数据连接传送数据,数据在通过数据连接到达本地后进行解密,然后转发给指定的host:hport。
示例:$ ssh -R 7001:localhost:389 LdapClientHost
使用SSH进行端口转发_第2张图片
上面这两种转发环境下,只能支持单个主机访问绑定的端口,为了使得更多的主机可以使用转发功能,可以增加-g参数,以共享出绑定端口,供多台设备访问使用。

4 动态转发
ssh -D [bind-addr:]port sshd-host
其作用是,创建一个绑定在bind-addr:port上的socks代理,代理收到的数据将被加密并发送到sshd-host上解密,由sshd-host转发到数据所请求的地址上。
示例:$ ssh -D 7001 <SSH Server>
使用SSH进行端口转发_第3张图片

5 多主机应用场景

示例:在C设备上执行 $ ssh -g -L {C}:7001:{B}:389 {D}  将{x}替换为对应主机的主机名或IP即可。当然需要配置A主机上的应用通过SOCKS代理将数据发送到C主机的7001端口上。
使用SSH进行端口转发_第4张图片
参考文献及图片来源:
http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html


你可能感兴趣的:(使用SSH进行端口转发)