VSCode Remote-SSH 仅按 ~/.ssh/config 中的 Host 段硬加载私钥,需为每台服务器配置唯一 Host 名、绝对路径 IdentityFile(不支持 ~ 展开)、600 权限私钥及 700 权限 .ssh 目录,且禁用 ssh-agent。

VSCode 本身不管理 SSH 密钥,它只按你写的 ~/.ssh/config 配置硬加载私钥——所以“管理多个密钥”的本质,是你手动配好多个 Host 段,并确保每个 IdentityFile 路径正确、权限合规。
每个服务器配一个独立 Host 段,别混用
Remote-SSH 插件靠 Host 别名识别连接目标,不是靠 IP 或用户名。同一台服务器如果被多个 Host 段指向,可能因 IdentityFile 冲突导致认证失败。
- 每个远程主机必须有唯一
Host名,比如prod、staging、db-server -
HostName可以重复(比如都是192.168.1.100),但IdentityFile必须指向不同私钥文件 - 不要在多个
Host段里共用同一个IdentityFile,除非你真想让一把私钥登录所有服务器 - 示例配置片段:
Host prod HostName 192.168.1.100 User admin IdentityFile ~/.ssh/prod_key IdentitiesOnly yes Host staging HostName 192.168.1.100 User deploy IdentityFile ~/.ssh/staging_key IdentitiesOnly yes
IdentityFile 必须写绝对路径,~ 不展开
VSCode Remote-SSH 解析 ~/.ssh/config 时不支持波浪号展开,哪怕你在终端里 ssh prod 能通,插件也会忽略 ~/ 开头的路径。
- Linux/macOS 正确写法:
IdentityFile /home/yourname/.ssh/prod_key - Windows(Git Bash)可用:
IdentityFile /c/Users/yourname/.ssh/prod_key - Windows(CMD/PowerShell)需双反斜杠:
IdentityFile C:\Users\yourname\.ssh\prod_key - 路径中不能含空格或中文,否则插件可能静默失败
私钥权限不对,VSCode 就当它不存在
OpenSSH 在读取私钥前会强制校验权限:只要不是 600,就跳过该文件,不报错也不提示——Remote-SSH 只能 fallback 到密码登录或报 Permission denied (publickey)。
- 执行
chmod 600 ~/.ssh/prod_key(Linux/macOS)或chmod 600 /c/Users/yourname/.ssh/prod_key(Windows Git Bash) -
~/.ssh目录权限也得是700:chmod 700 ~/.ssh - 别用记事本编辑私钥:可能插入 BOM 或 CRLF,导致解析失败;用 VSCode 或 Notepad++(保存为 UTF-8 无 BOM)
- 验证命令:
ls -l ~/.ssh/prod_key,输出应为-rw-------
别指望 ssh-agent,Remote-SSH 默认不走它
即使你已运行 ssh-add ~/.ssh/prod_key,Remote-SSH 也不会从 agent 拿密钥——它只认 config 里写的 IdentityFile。
- 加
IdentitiesOnly yes能防止其他密钥干扰,尤其当你本地有多个私钥时 - 不依赖 agent 更可控,也避免因 agent 崩溃或超时导致连接中断
- 想确认是否真用了你的密钥?打开命令面板 →
Remote-SSH: Show Log,搜索Running script with connection command,看参数里有没有-i /path/to/prod_key
最常被忽略的是:远端环境缺失基础命令(tar、ps、bash)会导致 VSCode Server 启动失败,现象是卡在 “Setting up SSH Host”,但这和密钥完全无关——得先手动登录服务器,跑一遍 bash -c 'which tar ps bash' 确认它们都在 PATH 里。


















