端口转发是SSH协议的一个特性,它允许您指定一台主机上的端口,并使用SSH连接作为代理,将该端口上的网络连接转发到另一台主机上的端口。
端口转发通常用于两个目的:
- 端口转发在网络中更安全,因为传输走的是SSH加密通道。
- 内部服务端口(被防火墙屏蔽的)可通过SSH通道向用户开放。
OnTheSSH提供图形界面的端口转发,使用起来简单且不容易出错。先看一个简单场景的示例:
简单场景

在左侧栏中用鼠标点击一个远端主机(这里是Ubuntu),点击右侧的“端口转发”按钮(像防火墙的那个),弹出对话框如上图。本地TCP侦听端口80,远端转发地址127.0.0.1端口80,点击OK,将创建一个将本地80端口转发到远端80端口的SSH通道,见下图:

这里显示创建了一个端口转发通道,状态running表示通道正在运行中(端口转发创建成功了),连接数0表示还没有使用中的socket连接。

这个示例是一个典型的使用场景,这时在本地主机浏览器中输入http://localhost:80将访问到远端的http服务内容。
复杂场景
端口转发还可以建立更复杂的场景,注意这个示例中要转发的端口并不在SSH通道的远端主机上。

SSH通道建立在本地的192.168.0.1和远端的10.2.0.1之间,但要访问的Mysql服务在远端10.2.0.2上。原本Mysql服务在192这个网段上是无法访问的,两个网段之间可能有防火墙阻隔,但通过端口转发,可将Mysql服务的3306端口映射到本地主机192.168.0.1的3307端口上,这样在本地就可以访问到Mysql服务。
注意远端转发地址的设置,它是站在10.2.0.1主机上访问Mysql主机的地址。前面简单场景中转发地址配置127.0.0.1,也是站在SSH通道远端主机角度配置的,127.0.0.1就是它自己。