因为需要做一些特殊的实验接触到了ssh的端口转发。所谓SSH端口转发,就是它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程有时也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果您工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,那么也是能够通过将 TCP 端口转发来使用 SSH 进行通讯。
总的来说 SSH 端口转发能够提供两大功能:
1.加密 SSH Client 端至 SSH Server 端之间的通讯数据。
2.突破防火墙的限制完成一些之前无法建立的 TCP 连接。
SSH端口转发:
本地端口转发
远程端口转发
动态端口转发
本地端口转发
ssh -L <local port>:<remote host>:<remote port> <SSH hostname>
选项:
-f 后台启用
-N 不打开 远程shell ,处于等待状态
-g 启用网关功能
示例:
ssh –L 9527:telnetsrv:23 -N sshsrv
telnet 127.0.0.1 9527
当访问本机的 9527 的端口时发送数据时,本机作为SSH客户端把数据加密后转发到给SSH服务器,SSH服务器接收数据并解密后作为TELNET客户端转发到TELNET服务器。
data<->localhost:9527<->localhost:随机端口<->SSH服务器:22<->SSH服务器:随机端口<->telnetsrv:23
远程端口转发
ssh -R <local port>:<remote host>:<remote port> <SSH hostname>
让sshsrv 侦听9527 端口的访问,如有访问,就加密 后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发 到telnetsrv:23
动态端口转发
ssh -D <local port> <SSH Server>
本地转发,远程转发,但是前提都是要求有一个固定的应用服务端的端口号,但是像浏览器等进行 Web 浏览时就没有确定的端口这是就需要动态端口转发了。