ssh实现端口转发

端口转发

1
ssh -fCNL *:1114:localhost:10004 127.0.0.1

本质:

通过 SSH 建立一个“本地端口转发”,让本机所有网卡上的 1114 端口,转发到 SSH 对端所看到的 localhost:10004

逐段拆解

部分 含义
ssh 使用 SSH 建立连接
-f SSH 认证完成后,把SSH进程放到后台运行
-C 开启压缩
-N 不执行远程 Shell/命令,只做端口转发
-L 本地端口转发(Local Forwarding)
*:1114 在本机所有网卡地址的 1114 端口监听
localhost:10004 流量转发到 SSH 服务端视角的 localhost:10004
127.0.0.1 SSH 登录的目标主机

最关键的是 -L

标准格式:

1
ssh -L [本地地址:]本地端口:目标地址:目标端口 SSH服务器

你的命令:

1
2
3
*:1114 : localhost:10004  127.0.0.1
\____/ \____________/ \________/
本地监听 转发目标 SSH服务器

因此连接关系可以理解成:

1
2
3
4
5
6
7
8
9
10
11
12
13
客户端

│ 访问

本机:1114

│ SSH 隧道

SSH服务器

│ 访问服务器自己的 localhost:10004

服务器:10004

但是这里有一个非常重要的特殊点:

127.0.0.1 同时出现在两个不同位置

1
2
3
ssh ... localhost:10004 127.0.0.1
^^^^^^^^^
SSH服务器

以及:

1
2
3
localhost:10004
^^^^^^^^^^^^^^^^
转发目标

如果 SSH 服务端就是当前这台机器,那么实际上相当于:

1
2
3
4
5
本机 1114

SSH 隧道

本机 10004

也就是:

1
*:1114  ─────SSH─────> 127.0.0.1:10004

2. *:1114 为什么是 *

这里的 * 表示:

SSH 客户端在本机所有可用网络接口上监听 1114。

例如本机有:

1
2
3
127.0.0.1
192.168.1.10
10.0.0.5