Linux
使用 SSH Tunnel 通过 A 设备连接 B 设备,有以下两种常见的方式。
本地转发(A 设备能直接访问 B 设备)
在 A 设备上执行命令:ssh -f -N -L A转发port:B主机IP:B目的端口 root@B主机
参数含义如下:
-f
:让 SSH 在后台运行。-N
:不执行远程命令,只建立隧道。-L
:指定本地转发,格式为本地转发端口:目标主机IP:目标端口
。
例如,要将 A 设备的 8080 端口转发到 B 设备的 80 端口,B 设备的 IP 是 192.168.1.100,命令为 ssh -f -N -L 8080:192.168.1.100:80 root@192.168.1.100
。之后,访问 A 设备的 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.100:80 user@192.168.1.200
,将本地 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 界面中进行文件传输等操作。