AIGC标识 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 output
    • UnparsableOutput
    • client_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 侧行为:

  1. 密码/密钥认证成功(小包)
  2. 开始安装/拉起 VS Code Server(流量变大,且带 -D
  3. 连接被 reset
  4. 扩展解析不到 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
posted @ 2026-08-05 08:36  丘狸尾  阅读(19)  评论(0)    收藏  举报