VSCode Remote-SSH 默认不使用 ssh-agent,优先按 ~/.ssh/config 中 IdentityFile 直读私钥;若命令行 ssh 免密而 VSCode 仍要密码,主因是配置路径错误、权限异常、Host 未匹配或 config 未重载。

VSCode 连 SSH 一直提示输入密码,基本不是 VSCode 自身的问题,而是本地 ssh 客户端配置或服务端认证链某个环节被静默跳过或拒绝。Remote-SSH 插件完全复用系统 ssh 命令的行为逻辑,它不会自己读密钥、不启动 ssh-agent、也不解析非标准字段——只要命令行 ssh user@host 能免密,VSCode 就该能;反之,若命令行能连而 VSCode 不行,大概率是路径、权限或代理配置没对上。
为什么 ssh user@host 成功但 VSCode 仍要密码?
VSCode Remote-SSH 默认不使用 ssh-agent,它优先按 ~/.ssh/config 中的 IdentityFile 直接读取私钥文件。常见断点:
-
remote.SSH.path设置了自定义 ssh 路径(如 Git Bash 的ssh.exe),但该二进制未加载你的~/.ssh/config或不识别 Windows 路径中的~ -
~/.ssh/config中IdentityFile写的是相对路径或含空格的路径,OpenSSH 解析失败后直接退回到密码认证 - Windows 下私钥文件权限太宽松(比如继承了
Authenticated Users),OpenSSH for Windows 会打印WARNING: UNPROTECTED PRIVATE KEY FILE!并忽略该密钥 -
Host别名没匹配上:VSCode 连接时用的是 IP 或域名,但config里只配了Host myserver,没写HostName,导致配置块根本没生效
ssh -v 日志里出现 next authentication method: password 怎么办?
这说明服务端明确拒绝了你提供的公钥,不是“没发”,而是“发了但被拒”。重点看日志中紧挨着的几行:
- 如果看到
offering public key: /path/to/id_rsa但紧接着是server accepts key: no或无此句 → 公钥未被服务端接受 - 如果压根没出现
offering public key→ 客户端根本没尝试发密钥,问题在本地配置(config格式错、IdentityFile路径不存在、权限不对) - 检查服务端
/etc/ssh/sshd_config是否启用:PubkeyAuthentication yes、AuthorizedKeysFile .ssh/authorized_keys,且sshd已重载(sudo systemctl reload sshd) - 确认服务端
~/.ssh/authorized_keys文件末尾没有多余空行或不可见字符,每行公钥必须是完整一行,不能换行
Windows 用户私钥权限报错 Bad permissions 怎么修?
OpenSSH for Windows 对私钥文件权限极其敏感,哪怕只是多了一个用户组(如 Everyone 或 Authenticated Users)就会直接跳过该密钥。不能靠资源管理器“属性→安全”图形界面改,必须用 icacls 命令彻底重置:
icacls "C:\Users\YourName\.ssh\id_rsa" /inheritance:r icacls "C:\Users\YourName\.ssh\id_rsa" /remove:g "Everyone" /remove:g "Authenticated Users" /remove:g "Users" icacls "C:\Users\YourName\.ssh\id_rsa" /grant:r "%USERNAME%:(R)"
执行完后,用 icacls "C:\Users\YourName\.ssh\id_rsa" 确认输出中只有你当前用户的 R 权限,且无其他条目。Linux/macOS 用户则只需 chmod 600 ~/.ssh/id_rsa。
VSCode 连上了但反复安装 vscode-server 或卡在 Installing VS Code Server?
这不是认证问题,而是 ~/.vscode-server 目录损坏或权限异常导致的后续流程失败。即使免密登录成功,VSCode 仍需在服务端部署运行时环境。此时:
- 手动删掉远程服务器上的
~/.vscode-server和~/.vscode-server-insiders(如有) - 确保
~目录权限是755,~/.ssh是700,否则vscode-server安装脚本可能因无法写入临时目录而静默失败 - 连接时在 VSCode 命令面板中选
Remote-SSH: Kill VS Code Server on Host...清理残留进程 - 不要在
~/.ssh/config中加IdentitiesOnly yes却不配IdentityFile,这会让 ssh 拒绝所有密钥尝试,直接 fallback 到密码
最常被忽略的一点:VSCode Remote-SSH 不会自动 reload ~/.ssh/config,改完配置必须重启 VSCode(不是重连,是整个进程退出再打开),否则旧缓存仍生效。


















