首先要记住一件事情就是:
SSH 端口转发自然需要 SSH 连接,而 SSH连接是有方向的,从 SSH Client 到 SSH Server 。
而我们所要访问的应用也是有方向的,应用连接的方向也是从应用的 Client 端连接到应用的Server端。比如需要我们要访问Internet上的Web站点时,Http应用的方向就是从我们自己这台主机(Client)到远处的WebServer。
如果SSH连接和应用的连接这两个连接的方向一致,那我们就说它是本地转发。
ssh -L <local port>:<remote host>:<remote port> <SSH hostname>
如果SSH连接和应用的连接这两个连接的方向不同,那我们就说它是远程转发。
ssh -R <local port>:<remote host>:<remote port> <SSH hostname>
![SSH的转发](https://i-blog.csdnimg.cn/blog_migrate/2e43106214ebe2ea4b27c09bed5b777b.jpeg)
本地转发在本地这台机器上监听一个端口,然后所有访问这个端口的数据都会通过ssh隧道传输到远端的对应端口上,下面是例子。
远程转发与本地转发正好相反,打开ssh隧道以后,在远端服务器监听一个端口,所有访问远端服务器指定端口都会通过隧道传输到本地的对应端口上,下面是例子。
这里是一篇很好的介绍SSH PortForwarding的文章http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/
ssh -gfNL 5924:19.2.192.209:5924 aaa@192.168.24.41