在企业网络环境中,通过跳板机访问内网或 WSL2 主机时,SSH 经常出现不稳定问题,例如连接卡在 SSH2_MSG_KEX_ECDH_REPLY,或在连接成功后出现 vim/tmux 显示不完整、会话假死等现象。

这类问题本质上与网络路径、MTU、TCP 长连接稳定性有关,单纯依赖 ssh 或 autossh 很难彻底解决。

目标

实现如下访问路径:

MacBook → 公网服务器 → 内网机器 / WSL2

在 MacBook 上通过 SSH 连接公网服务器的某个端口,即可稳定访问内网主机的 SSH 服务。


服务端(公网服务器)

下载并启动 frps:

wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz
tar xf frp_0.53.2_linux_amd64.tar.gz
cd frp_0.53.2_linux_amd64

创建最小配置:

# frps.ini
[common]
bind_port = 7000

启动服务:

./frps -c frps.ini

确保云防火墙放行 7000 端口。


客户端(内网机器 / WSL2)

下载 frpc 并配置反向 SSH 通道:

wget https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz
tar xf frp_0.53.2_linux_amd64.tar.gz
cd frp_0.53.2_linux_amd64
# frpc.ini
[common]
server_addr = 公网服务器IP
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2222

启动客户端:

./frpc -c frpc.ini

(在 WSL 中推荐使用 systemd 管理,确保长期运行)


使用与验证

在 MacBook 上直接连接公网服务器映射端口:

ssh -p 2222 user@公网服务器IP

验证方式:

hostname

如果显示的是内网机器 / WSL 的主机名,说明反向代理链路已完全打通。