VSCode Remote-SSH默认不使用ssh-agent,必须手动添加私钥(如ssh-add ~/.ssh/id_ed25519),且需配合~/.ssh/config中明确指定IdentityFile、authorized_keys权限为600、.ssh目录权限为700,否则仍会报“Permission denied (publickey)”。

能实现,但必须手动把私钥加进 ssh-agent,否则 VSCode 会卡在密码输入或报 Permission denied (publickey)。
ssh-agent 不自动加载私钥,VSCode 就不会用它
VSCode Remote-SSH 默认不触发系统级 ssh-agent 的密钥缓存机制——哪怕你本地终端里 ssh-add -l 能看到密钥,VSCode 启动的连接进程也看不到。这是最常被忽略的根源。
- Windows(OpenSSH 客户端):需手动运行
Get-Service ssh-agent | Start-Service,再执行ssh-add ~/.ssh/id_ed25519 - macOS:ssh-agent 通常随系统启动,但私钥仍需显式添加:
ssh-add -k ~/.ssh/id_ed25519(-k表示从钥匙串读取密码) - Linux:检查
ssh-agent是否在当前 shell 环境中运行(echo $SSH_AUTH_SOCK非空),再ssh-add ~/.ssh/id_ed25519
跳转链路上每台机器都要单独加对应私钥
比如 local → jump → target,你得分别把 id_ed25519_jump 和 id_ed25519_target 都加进 agent。VSCode 不会帮你猜哪一把钥匙开哪扇门。
- 跳板机(jump)密钥只用于登录 jump,不能复用到 target
- target 密钥必须是部署在 jump 上、且被
ProxyJump流程实际使用的那一把 - 如果用
ProxyCommand,确保ssh -q -W %h:%p jump这条命令本身也能走 agent(即该命令在终端里执行时不输密码)
VSCode 连接时仍提示输密码?先看登录终端输出
启用 Remote.SSH: Show Login Terminal 设置后,连接失败时会弹出真实 SSH 日志。重点盯三行:
-
debug1: Offering public key: ~/.ssh/id_ed25519 RSA SHA256:xxx agent→ 表示 agent 成功提供密钥 -
debug1: Authentications that can continue: publickey,password→ 密钥被拒,继续尝试密码 -
Received disconnect from xxx port 22:2: Too many authentication failures→ agent 尝试了过多密钥(常见于没指定IdentityFile且目录下密钥太多)
权限和配置文件写错,agent 再强也没用
agent 只管“给钥匙”,不管“门锁是否认”。以下任一条件不满足,免密直接失效:
-
~/.ssh/config中每个Host必须明确写IdentityFile,不能依赖默认路径 -
~/.ssh/authorized_keys在 jump 和 target 上都得是chmod 600,~/.ssh目录必须是chmod 700 - jump 服务器的
/etc/ssh/sshd_config必须含PubkeyAuthentication yes,且没被Match块覆盖 - Windows 跳板机若为 OpenSSH Server,要确认
C:\ProgramData\ssh\sshd_config中AuthorizedKeysFile指向用户目录下的.ssh/authorized_keys,而非管理员专用路径
真正卡住的地方往往不是 agent 配不配得上,而是某一级的 authorized_keys 权限错了、或者 config 里漏写了 IdentityFile——这两处一错,agent 根本没机会出场。


















