VSCode Remote-SSH报“Permission denied (publickey)”90%因权限不合规:本地私钥、~/.ssh/config、~/.ssh目录须为600/700,远程authorized_keys及.ssh目录同理,且Windows路径需用正斜杠、禁用BOM编辑。

VSCode Remote-SSH 报 Permission denied (publickey),90% 是本地或远程的密钥权限不合规,不是密钥没生成、也不是密码输错了。
私钥文件权限必须是 600(chmod 600 ~/.ssh/id_rsa)
OpenSSH 在 Node.js 环境(即 VSCode Remote-SSH)中会严格校验私钥权限:只要组或其他人有读/写权限,就直接忽略该密钥,连试都不试。
- Linux/macOS/WSL 下执行:
ls -l ~/.ssh/id_rsa,确认输出权限为-rw------- - 如果不是,立刻修复:
chmod 600 ~/.ssh/id_rsa - Windows 用户注意:用资源管理器右键 → 属性 → 安全 → 高级 → 关闭“继承权限”,仅保留当前用户“完全控制”,其他全部删掉
- 别用记事本或带 BOM 的编辑器改私钥——哪怕只多一个空格或换行符,也会导致解析失败
~/.ssh/config 和 ~/.ssh 目录权限同样关键
VSCode 不只看私钥,还会读取 ~/.ssh/config,而 OpenSSH 要求这个文件也必须是私有的;整个 .ssh 目录也不能被组/其他人访问。
- 运行:
ls -ld ~/.ssh→ 必须是drwx------(即chmod 700 ~/.ssh) - 运行:
ls -l ~/.ssh/config→ 必须是-rw-------(即chmod 600 ~/.ssh/config) - 如果 config 文件里用了
IdentityFile,路径里的私钥也要同步检查权限(比如IdentityFile ~/.ssh/mykey就要检查mykey的权限) - Windows 上若用 OpenSSH for Windows,config 路径要用正斜杠:
IdentityFile C:/Users/Me/.ssh/id_rsa,反斜杠会被忽略
远程服务器上的 ~/.ssh/authorized_keys 权限常被忽略
VSCode 已连上服务器但卡在认证环节?问题可能出在服务端。OpenSSH 服务(sshd)默认拒绝加载权限过宽的 authorized_keys。
- 登录服务器终端,执行:
ls -l ~/.ssh/authorized_keys→ 必须是-rw------- - 同时检查目录:
ls -ld ~/.ssh→ 必须是drwx------ - 修复命令(在服务器上运行):
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys - 如果
authorized_keys是 root 创建的,还要确认归属:chown $USER:$USER ~/.ssh/authorized_keys
权限修复后仍失败?检查是否被 ssh-agent 干扰
VSCode Remote-SSH 默认不继承终端的 ssh-agent 状态。如果你习惯用 ssh-add 加载密钥,VSCode 很可能根本没拿到它。
- 临时禁用 agent 测试:在
~/.ssh/config对应 Host 块里加一行:IdentitiesOnly yes - 确保
IdentityFile显式指向私钥路径,不要依赖 agent - 如需启用 agent 转发,必须手动开启配置:
"remote.SSH.enableAgentForwarding": true,且确认 agent 正在运行(ssh-add -l有输出) - Windows 用户若用 WSL,注意 WSL 和 Windows 的
ssh-agent是隔离的,别混用
真正容易被忽略的是:权限修复必须**两端同步生效**——本地私钥 + config + 目录,远程 authorized_keys + .ssh 目录,缺一不可。改完任意一端都得重新触发连接,VSCode 不会自动重载已缓存的权限状态。











