Linux
使用 SSH Tunnel 通过 A 设备连接 B 设备,有以下两种常见的方式。
本地转发(A 设备能直接访问 B 设备)
在本地执行命令:ssh -f -N -L <本地转发端口>:<B设备的IP地址>:<B设备的端口> <A设备的用户名>@<A设备的IP地址>
参数含义如下:
-f
:让 SSH 在后台运行。-N
:不执行远程命令,只建立隧道。-L
:指定本地转发,格式为本地转发端口:目标主机IP:目标端口
。
例如,要实现通过 A 设备将 B 设备的 80
端口转发到本地的 8080
端口,A 设备的 IP 是 192.168.1.100
,B 设备的 IP 是 192.168.1.200
,命令为 ssh -f -N -L 8080:192.168.1.200:80 root@192.168.1.100
。之后,访问本地的 8080
端口,就可以访问 B 设备的 80
端口。
远程转发(B 设备能访问 A 设备,但 A 设备无法直接访问 B 设备)
假设 A 设备有公网 IP,B 设备在 NAT 之后。首先在 A 设备上编辑 sshd
的配置文件 /etc/ssh/sshd_config
,将 GatewayPorts
开关打开,然后重启 sshd
服务,命令为 sudo systemctl restart sshd
。
接着在 B 设备上执行命令:autossh -p 22 -M 6777 -NR '*:6766:localhost:22' usera@a.site
参数含义如下:
-p
:指定 SSH 连接的端口。-M
:指定监听隧道状态的端口。-NR
:指定远程转发,*
表示绑定到所有网络接口。
最后在 A 设备上使用命令 ssh -p 6766 userb@localhost
,即可通过 A 设备的 6766
端口反向 SSH 连接到 B 设备。
Windows
使用 OpenSSH
确保 Windows 安装 OpenSSH 客户端:在 Windows 10 及以上版本,可通过“设置”中的“应用和功能”,点击“可选功能”,添加“OpenSSH客户端”进行安装。
建立隧道:以管理员身份打开 PowerShell,执行
ssh -L <本地转发端口>:<B设备的IP地址>:<B设备的端口> <A设备的用户名>@<A设备的IP地址>
。例如ssh -L 8080:192.168.1.200:80 root@192.168.1.100
,将本地8080
端口与 B 设备的80
端口建立隧道。通过隧道访问:访问
localhost:本地端口
,就可访问 B 设备对应端口服务。
使用 PuTTY
下载和安装 PuTTY:从 PuTTY 官方网站下载并安装。
配置隧道:打开 PuTTY,在“Session”类别中填写 A 设备的主机名或 IP 地址及 SSH 端口。在“Tunnels”类别中,“Source port”填写本地端口,“Destination”填写
B设备的IP地址:B设备的端口
,点击“Add”添加隧道设置。保存设置并连接:回到“Session”类别,保存设置后点击“Open”连接到 A 设备,即可建立 SSH 隧道。
使用 WinSCP(用于文件传输场景)
下载和安装 WinSCP:从 WinSCP 官方网站下载安装。
配置站点:打开 WinSCP,点击“新建站点”。在“主机名”中填写 A 设备的 IP 地址,“用户名”和“密码”填写 A 设备的登录凭证。在“高级”设置中,选择“隧道”,勾选“使用隧道”,并填写 B 设备的 IP 地址和端口。
连接并传输文件:保存站点设置后点击“登录”,连接成功后可在 WinSCP 界面中进行文件传输等操作。