vscode remote-ssh反复弹密码框,主因是本地ssh客户端密钥未正确加载:私钥权限非600、identityfile路径未用绝对路径、~/.ssh/config语法不规范,三者占90%失败原因。

VSCode Remote-SSH 连接时反复弹密码框,基本不是插件问题,而是本地 SSH 客户端没把密钥“交到服务器手上”——私钥权限错、IdentityFile路径写错、~/.ssh/config语法不规范,三者占了 90% 的失败原因。
私钥权限必须是 600,否则 OpenSSH 直接跳过
OpenSSH 在加载私钥前会强制校验权限,只要不是 600(即仅所有者可读写),就静默拒绝,连日志都不报错,直接 fallback 到密码认证。
-
chmod 600 ~/.ssh/id_ed25519(Linux/macOS) - Windows 上用 Git Bash 或 WSL 执行同命令;若用 PowerShell,需额外用
icacls确保 NTFS 权限等效 -
chmod 700 ~/.ssh—— 目录权限也不能宽于700,否则同样被拒 - 别把私钥放 OneDrive/iCloud 同步目录下,某些同步客户端会重置权限
~/.ssh/config 中 IdentityFile 必须写绝对路径
VSCode 的 Remote-SSH 不展开 ~,~/.ssh/id_rsa 在配置里会被忽略,看着像配了,实则没生效。
- Linux/macOS:写成
IdentityFile /home/yourname/.ssh/id_ed25519 - Windows(OpenSSH for Windows):写成
IdentityFile C:\Users\yourname\.ssh\id_ed25519(双反斜杠) - 确保
Host别名和你在 VSCode 命令面板里选的一致,比如配了Host prod,就要选prod,不能输 IP - 加一行
IdentitiesOnly yes,避免 SSH agent 或其他密钥干扰主流程
验证是否真走了 config:看 Remote-SSH: Show Log 输出
打开命令面板(Ctrl+Shift+P),执行 Remote-SSH: Show Log,第一屏里找 Running script with connection command 那行:
- 如果看到
-F /home/yourname/.ssh/config -o IdentityFile=/path/to/key,说明 config 和密钥路径都对上了 - 如果只看到
ssh user@host没带-i或-F,说明 VSCode 没读到 config,回去检查文件路径、语法、Host 块结构 - 如果看到
Could not establish connection... All configured authentication methods failed,大概率是私钥权限或authorized_keys权限不对(远程~/.ssh目录应为700,authorized_keys应为600)
最常被忽略的是:VSCode 默认不走 ssh-agent,哪怕你 ssh-add -l 能看到密钥,它也不会去取——它只认 config 里写的 IdentityFile。所以别指望加了 agent 就万事大吉,老老实实配好路径和权限,才是最稳的路。











