VS Code/Antigravity Remote SSH 连接要求输入密码?明明已经配了 SSH 密钥

问题描述

SSH config 已经配置好了密钥登录:

复制代码
Host MyServer
  HostName xx.xx.xx.xx
  User root
  Port 22
  IdentityFile "C:\Users\onefly\.ssh\id_rsa"
  ForwardAgent yes

在 Git Bash 中 ssh MyServer 可以正常免密登录,但通过 VS Code Remote SSH 连接时却弹出密码输入框。

排查过程

1. 检查服务器端

  • ~/.ssh/authorized_keys 中已有对应公钥
  • ~/.ssh 权限 700,authorized_keys 权限 600
  • sshd_config 中 PermitRootLogin yes,PubkeyAuthentication 默认启用

服务器端一切正常。

2. 发现关键线索

查看 VS Code 的 Remote SSH 日志(输出面板 → Remote - SSH),发现关键错误:

复制代码
debug1: Offering public key: C:\\Users\\ranxi\\.ssh\\id_rsa RSA SHA256:xxxxx explicit
debug1: Server accepts key: C:\\Users\\ranxi\\.ssh\\id_rsa RSA SHA256:xxxxx explicit

Bad permissions. Try removing permissions for user: MSI\CodexSandboxUsers (S-1-5-21-xxxx) on file C:/Users/ranxi/.ssh/id_rsa.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:\\Users\\ranxi\\.ssh\\id_rsa' are too open.
This private key will be ignored.
Load key "C:\\Users\\ranxi\\.ssh\\id_rsa": bad permissions
debug1: Next authentication method: password

服务器已经接受了密钥,但客户端在签名阶段拒绝使用它,因为私钥文件权限"太开放"。

3. 根本原因

VS Code Remote SSH 使用的是 Windows 自带的 OpenSSH (C:\Windows\System32\OpenSSH\ssh.exe),而不是 Git Bash 自带的 OpenSSH。

两者的区别:

Git Bash OpenSSH Windows OpenSSH
路径 C:\Program Files\Git\usr\bin\ssh.exe C:\Windows\System32\OpenSSH\ssh.exe
权限检查 使用 POSIX 模拟,较宽松 使用 Windows ACL,严格检查

Windows OpenSSH 发现私钥文件被 CodexSandboxUsers 用户组拥有继承的读取权限((I)(RX)),认为不安全,直接拒绝使用密钥,fallback 到密码认证。

解决方案

在 PowerShell(管理员) 或 CMD 中执行:

powershell 复制代码
icacls C:\Users\ranxi\.ssh\id_rsa /inheritance:r /grant ranxi:F /grant SYSTEM:F /grant Administrators:F

这条命令做了三件事:

  1. /inheritance:r --- 移除继承的权限(去掉 CodexSandboxUsers 等继承来的 ACL)
  2. /grant onefly:F --- 给当前用户完全控制权
  3. /grant SYSTEM:F /grant Administrators:F --- 保留系统和管理员权限

执行后验证:

powershell 复制代码
icacls C:\Users\ranxi\.ssh\id_rsa

输出应该只有:

复制代码
C:\Users\ranxi\.ssh\id_rsa BUILTIN\Administrators:(F)
                           NT AUTHORITY\SYSTEM:(F)
                           MSI\ranxi:(F)

没有 CodexSandboxUsers 了,重新连接 VS Code Remote SSH 即可免密登录。

总结

  • 现象:Git Bash SSH 正常,VS Code Remote SSH 要密码
  • 原因:两者用的是不同的 SSH 客户端,Windows OpenSSH 对私钥文件权限检查更严格
  • 修复:移除私钥文件上多余用户组的继承权限
相关推荐
秋饼18 小时前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
tengshujc2 天前
机器人检测软件哪个好用?
技术分享
秋饼2 天前
Spring AI + MCP 工具调用可靠性实战:参数校验、权限防线与人工确认生产级落地
java·ai·技术分享·后端开发
zhaodezhu16884 天前
苏州GEO优化专业服务一网推定制精准落地方案
技术分享
米兰的小花匠4 天前
双目相机数据上云:边缘预处理/压缩回传/带宽测算与数字孪生应用
技术分享
秋饼6 天前
LLM API密钥动态轮换实战:Spring Vault + Spring AI + 多Provider路由
java·ai·技术分享·后端开发
tengshujc6 天前
地坪检测怎么做?环氧、聚氨酯地坪有害物质、粘结强度、耐磨硬度项目及费用参考
技术分享
tengshujc6 天前
老化检测是什么?热空气·氙灯·紫外·臭氧老化及盐雾试验方法与费用指南
技术分享
2601_956743688 天前
上海GEO营销公司技术评估解析|以盾码无界公开产品路线为观察对象,梳理问题池构建、知识库事实锚定、内容审核与跨模型监测流程,明确现场演示和任务追溯的核验要求
大数据·人工智能·产品运营·技术分享·geo·上海
秋饼12 天前
Spring AI 2.0 结构化输出企业级实战:从 BeanOutputConverter 源码到生产级解析容错
java·ai·技术分享·后端开发