根本原因是Remote-SSH默认用SFTP逐文件上传、不压缩、不复用连接,且反复扫描工作区;应禁用GSSAPI/DNS、启用SSH连接复用、配置files.watcherExclude和remote.autoForwardPorts:false。

VSCode 通过 Remote-SSH 同步远端代码慢,根本原因不是“网络差”,而是它默认用 SFTP 协议逐文件上传、不压缩、不复用连接,且会反复扫描整个工作区——尤其当你没关 files.watcherExclude 或没禁用自动端口转发时,连保存一个 .js 文件都可能触发对 node_modules 的全量 stat。
Remote-SSH 文件同步为什么卡在“正在保存…”
VSCode 并不实时监听文件系统变更,而是靠“保存事件”触发 SFTP 上传。一旦你关了自动保存、用了外部工具改文件(比如 rsync 或容器挂载卷),或远程路径里有大量小文件(.git/objects、yarn/cache),同步就会卡住或延迟数秒。
- 检查是否启用了
"files.autoSave": "afterDelay"或"off":设为"onFocusChange"或"onWindowChange"能减少漏同步 - 确认远程目录没被挂载为 NFS/CIFS:这类文件系统
stat极慢,VSCode 会卡在“获取文件状态”阶段 - 用
ps aux | grep -i "sftp\|scp"看后台是否卡着未完成的传输进程 - 打开 VSCode 开发者工具(
Help → Toggle Developer Tools),筛选remote日志,搜索"upload"或"SFTP"查看具体哪一步耗时
SSH 配置没关 GSSAPI 和 DNS 解析,每次连接都多等 2 秒
OpenSSH 默认开启 GSSAPIAuthentication 和反向 DNS 查找,遇到 Kerberos 不可用或 DNS 响应慢的环境(比如内网无 DNS 服务器),会强制超时后才 fallback,单次连接就拖慢 1–3 秒——而 Remote-SSH 每次打开终端、运行命令、甚至切换标签页都可能新建连接。
- 在本地
~/.ssh/config对应 Host 块中加:GSSAPIAuthentication noUseDNS noAddressFamily inet - 务必避免写成
GSSAPIAuthentication false:OpenSSH 只认yes/no,写错等于没关 - 改完后必须重启 Remote-SSH 窗口(不是重载窗口),否则配置不生效
没启用 SSH 连接复用,导致频繁握手开销
Remote-SSH 在后台频繁建立新连接(比如你同时开终端 + 调试器 + 文件浏览),每次都要走 TCP 握手 + 密钥交换 + 加密协商。启用 ControlMaster 后,后续连接直接复用已有通道,首字节延迟从 ~800ms 降到 ~20ms。
- 确保
~/.ssh/sockets目录存在:mkdir -p ~/.ssh/sockets - 在
~/.ssh/config中添加:ControlMaster autoControlPersist 600ControlPath ~/.ssh/sockets/%r@%h:%p - 注意
%r是用户名,%h是主机名,%p是端口——三者缺一不可,写错会导致复用失效 - Windows 用户若用 WSL,确保
~/.ssh/config在 WSL 内,PowerShell 的 SSH 配置不通用
远程端 vscode-server 正在疯狂扫描,CPU 占满却不动
VSCode Server 默认启用文件监视器,一连上就遍历整个工作区。如果项目含 node_modules、.git 或大日志目录,node 进程 CPU 持续 90%+,但编辑器界面完全无响应——这不是卡网络,是卡在本地磁盘 I/O。
- 在远程端
~/.vscode-server/data/Machine/settings.json中加:"files.watcherExclude": {"**/node_modules/**": true, "**/.git/**": true, "**/dist/**": true} - 禁止自动端口转发:
"remote.autoForwardPorts": false(它每次开终端都会扫一遍所有端口) - 如果远程内存
< 2GB,顺手加:"remote.extensionKind": {"*": ["ui"]},防止扩展在远程起独立进程 - 别信“重启 VSCode 就好”——必须杀掉残留的
code-server进程:pkill -f "vscode-server"再重连
真正拖慢 Remote-SSH 的,从来不是带宽,而是那些默认开启却没人关的“智能功能”:文件监视、端口扫描、GSSAPI 探测、非复用连接。每关一项,都能省下几百毫秒——积少成多,光标移动和保存响应就从“卡顿”变“跟手”。最易忽略的是 ControlPath 路径权限和 files.watcherExclude 的双星号写法,写错等于白配。


















