vscode ssh 与 zerotier 内网穿透 MTU 问题
VS Code Remote-SSH 连接失败排查记录
- 日期:2026-08-04
- 目标主机:
10.147.19.84(机械革命 mini /DESKTOP-IO26P1M) - 客户端:Windows VS Code + Remote-SSH
- 网络:ZeroTier(本机
10.147.19.78↔ 远端10.147.19.84)
现象
- 普通终端
ssh可以登录 - VS Code Remote-SSH 失败,日志关键错误:
Failed to parse remote port from server outputUnparsableOutputclient_loop: send disconnect: Connection reset
- 失败发生在 SSH 已认证成功之后、VS Code Server 安装完成之前
典型命令形态(VS Code 实际调用):
C:\WINDOWS\System32\OpenSSH\ssh.exe -T -D <port> 10.147.19.84 sh
排查过程
1. 排除 Host 名问题
最初 SSH config 使用中文 Host:
Host 机械革命-mini
HostName 10.147.19.84
User qiuliw
Port 22
Remote-SSH 对非 ASCII Host 名不友好,已改为英文别名:
Host mechrevo-mini
HostName 10.147.19.84
User qiuliw
Port 22
ServerAliveInterval 30
结论:改名后仍失败,说明不是唯一根因。
2. 排除 shell / 登录脚本干扰
远端检查结果:
- 默认 shell:
/bin/bash ~/.bashrc有标准非交互保护(case $- in *i*) ;; *) return;; esac)~/.local/bin/env只改PATH,无额外输出AllowTcpForwarding保持默认(允许)
并用与 VS Code 相同形态验证:
echo 'echo hello' | ssh -T -D 3244 qiuliw@10.147.19.84 sh
在 MTU 修正后可正常返回 hello。
结论:不是 shell profile / TcpForwarding 配置问题。
3. 排除“完全连不上”
从本机(WSL)观察:
ping 10.147.19.84正常- TCP 能建立到 22 端口
- 但 SSH 常卡在:
expecting SSH2_MSG_KEX_ECDH_REPLY
同时 ss 显示 Send-Q 堆积,典型 PMTU / MTU blackhole 特征。
4. 确认远端环境
Linux DESKTOP-IO26P1M ... microsoft-standard-WSL2 ...
说明目标不是独立 Linux 物理机,而是 另一台 Windows 上的 WSL2,并通过 ZeroTier 暴露 10.147.19.84。
远端接口:
| 接口 | 地址 | 原 MTU |
|---|---|---|
| eth0 | 10.147.19.84/24(ZeroTier) | 2800 |
| eth3 | 192.168.67.4/23 | 1440 |
本机 Windows ZeroTier:
| 接口 | 地址 | MTU |
|---|---|---|
| ZeroTier One [...] | 10.147.19.78 | 2800 |
5. 对照实验(关键证据)
把本机 WSL ZeroTier 网卡 MTU 从 2800 降到 1280 后:
- SSH 密钥交换立即成功
-T -D ... sh正常- 8MB 大数据传输正常
再看 VS Code 侧行为:
- 密码/密钥认证成功(小包)
- 开始安装/拉起 VS Code Server(流量变大,且带
-D) - 连接被 reset
- 扩展解析不到 listening port →
UnparsableOutput
远端 ~/.vscode-server 只有 data/、extensions/,没有完整 bin/,符合“装到一半被掐断”。
根因
ZeroTier 虚拟网卡 MTU=2800,叠加路径 PMTU 异常(常见于 VPN/WSL2),导致大包或较大握手包丢失/重置。
因此:
- 交互式小流量 SSH:往往看起来“能连”
- VS Code Remote-SSH(认证后安装 server + dynamic forwarding):容易
Connection reset
实施修复
远端(10.147.19.84 / WSL2)
sudo ip link set eth0 mtu 1280
rm -rf ~/.vscode-server
并写入公钥到 ~/.ssh/authorized_keys(Windows / WSL 均可免密)。
持久化尝试:在 /etc/crontab 增加开机设置 MTU(WSL 重启后若被宿主网络重置,仍需再设)。
本机 Windows ZeroTier MTU
管理员 PowerShell:
Set-NetIPInterface -InterfaceIndex 20 -NlMtuBytes 1280

浙公网安备 33010602011771号