Remote-SSH更新后报“Permission denied (publickey)”主因是校验变严格:私钥权限须为600、路径需绝对且无空格、配置优先级变为工作区config > remote.SSH.configFile > ~/.ssh/config,且语法错误会导致整块Host失效。

Remote-SSH插件更新后突然报 Permission denied (publickey)
这不是密钥丢了,而是插件更新后对密钥路径、权限或配置加载顺序的校验变严格了。新版 Remote-SSH(v0.100+)默认禁用不安全的配置回退机制,旧版能“将就”的地方现在直接跳过认证。
常见现象:终端里 ssh user@host 仍能连上,但 VSCode 点连接就卡在 “Establishing SSH connection…” 或秒报错;日志里出现 Skipping key /path/to/id_rsa: bad permissions 或 no suitable authentication method found。
- 检查私钥文件权限是否仍是
600:执行ls -l ~/.ssh/id_rsa,输出必须是-rw-------;Windows 用户需右键 → 属性 → 安全 → 高级 → 取消“继承权限”,仅保留当前用户“完全控制” - 确认私钥未被插件自动重写:插件更新后可能触发“自动密钥生成”逻辑(尤其首次打开 Remote-SSH 面板时),检查
~/.ssh/id_rsa的修改时间是否与更新时间吻合;若被覆盖,从备份恢复或重新ssh-keygen -t ed25519生成 - 禁用插件的自动密钥行为:在 VSCode 设置中搜索
remote.SSH.enableDynamicForwarding,设为false;再搜remote.SSH.generateHostKey,确保为false
VSCode读取的SSH配置文件不是你以为的那个
插件更新后,Remote-SSH 会按固定优先级加载配置,而不再“猜”你想要哪个 config 文件。它现在严格遵循:工作区.vscode/ssh-config.json > remote.SSH.configFile 设置值 > ~/.ssh/config > 内置默认值。你改了半天 ~/.ssh/config,结果插件根本没读它。
验证当前生效配置的方法:打开 VSCode 命令面板(Ctrl+Shift+P / Cmd+Shift+P),运行 Remote-SSH: Show Log,在日志顶部找这行:Applying SSH configuration file: /path/to/actual/config —— 这才是它真正在用的路径。
- 如果看到路径是
/path/to/actual/config指向一个你不知道的文件(比如工作区下的.vscode/ssh-config.json),立刻删掉或清空它 - 想强制使用
~/.ssh/config?在 VSCode 设置里把remote.SSH.configFile显式设为"~/.ssh/config"(macOS/Linux)或"C:\Users\YourName\.ssh\config"(Windows,注意双反斜杠或正斜杠) - Windows 用户特别注意:
~在 VSCode 的 Node.js 环境里不展开,必须写绝对路径;且IdentityFile行里的路径不能含空格或中文,否则静默失败
known_hosts 冲突引发的连锁失败
插件更新后,SSH 连接流程更早地介入主机密钥校验,一旦 known_hosts 里有旧指纹,它不会像老版本那样弹窗让你选“yes/no”,而是直接终止并抛出 Host key verification failed,接着触发“管道不存在”这类次生错误。
典型表现:连接日志里先出现 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!,紧接着是 The process tried to write to a nonexistent pipe. —— 后者只是前者的副作用。
- 快速清理指定主机记录:终端执行
ssh-keygen -R hostname_or_ip(例如ssh-keygen -R 192.168.5.193) - 彻底重置本地信任库(慎用):删掉整个
~/.ssh/known_hosts(Windows 是%USERPROFILE%.sshknown_hosts),下次连接会重新生成 - 如果远程服务器刚重装或换了 IP,别只删
known_hosts,还要确认服务端的/etc/ssh/ssh_host_*.key是否全新生成;否则下次连还是冲突
插件缓存与 vscode-server 版本不匹配
Remote-SSH 插件更新后,会尝试在远程服务器上安装对应版本的 vscode-server。但如果旧版 server 还在运行,或下载中断残留损坏包,就会导致认证通过后卡在“Downloading and installing VS Code Server”,最终超时断开。
这个阶段的失败常被误判为密钥问题,因为日志里看不到明显报错,只有反复重试和连接关闭。
- 登录服务器终端,手动清理旧 server:
rm -rf ~/.vscode-server(注意是波浪号,不是绝对路径) - 检查磁盘空间:
df -h,vscode-server解压需要至少 500MB 临时空间,/tmp或~分区满会导致静默失败 - 若公司网络限制外网访问,插件无法自动下载 server,则需提前手动上传并安装:从
https://update.code.visualstudio.com/commit:$(code --version | head -1)/server-linux-x64/stable下载 tar.gz,传到服务器~/.vscode-server/bin/下解压,并确保~/.vscode-server/bin/COMMIT_ID/bin/code-server可执行
最易被忽略的是:插件更新后,它对 ~/.ssh/config 里任意语法错误(比如多了一个空格、少了一个换行)都会直接放弃加载整块 Host 配置,而不是跳过错误行。所以哪怕只改了一行,也建议用 ssh -F ~/.ssh/config -T user@host 先验证配置有效性。


















