端口映射其实就是将其中一台网络设备(一个路由器、一台电脑或服务器)的某一个端口转换到另一个网络设备上,其实际上是NAT地址转换的一种。而本文要讲的主要是linux下的ssh连结命令实现的端口转发功能,在讲解端口转发前我们先了解下ssh命令的参数:

  1. -f 后台认证用户/密码,通常和-N连用,不用登录到远程主机;
  2. -p 被登录的ssd服务器的sshd服务端口;
  3. -L 本地机(客户机)的某个端口转发到远端指定机器的指定端口。工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口,一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接。可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口;
  4. -R 远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口,一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接.
  5. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口。
  6. -D指定一个本地机器 “动态的’’ 应用程序端口转发.工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去,根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root才能转发特权端口. 可以在配置文件中指定动态端口的转发。
  7. -C压缩数据传输。
  8. -N不执行脚本或命令,通常与-f连用。
  9. -g允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。

注:linux下的命令和参数是严格区分大小写的。

例:从某主机的 80 端口开启到本地主机 8080 端口的隧道
ssh -N -L8080:localhost:80 远程主机,现在你可以直接在浏览器中输入http://localhost:8080 访问这个网站。经常用到的三个转发命令是:

1ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host
2ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host
3ssh -C -f -N -g -D listen_port user@Tunnel_Host

基于安全的考虑,MySQL服务器的 3306 端口只能内部访问,防火墙对外只开了 ssh 端口。 这种情况我们就可以使用 SSH 的隧道外部直接访问 MySQL 。

使用 Putty 作为客户端,只在原有基础上加一项配置即可:

中文版选择“连接”->“SSH”->“通道”,在界面中
“源端口”即本地的访问端口,假设设置为 “3306”
“目的地”即 MySQL 服务器的 IP 地址加端口,假设设置为“192.168.0.1:3306”
点击“增加”按钮即在“映射的端口”列表中增加一条映射记录,将本地 3306 端口映射到远程的 3306 端口。
再返回到“会话”界面,点击“打开”通过 SSH 登录到远程服务器,该通道会自己建立。
然后通过 MySQL 客户端连接本地 3306 端口即可访问远程的数据库。

使用SecureCRT设置

先登陆ssh 服务器,然后就是“选项”—-“会话选项”,这里有个“连接”—–“端口转发”
右边显示“本地端口转发”—下面点添加,
名称:随便 。
本机:添上端口号,如:3306,相当于访问地址这个端口就是远程应用端口。
远程:添上端口号,如:3306,就是应用端口。如果是在远程里面的另一台服务器,就添上那一台的IP地址就行了。

除此之外,我们还可以通过ssh的端口转发功能(也算是映射的一种吧)实现代理上网、VNC远程、灰鸽子远程。具体做法大同小异。