VSCode推送GitHub报错ssh-add提示代理无身份问题咨询
核心问题定位
你遇到的推送失败直接诱因是SSH代理未加载对应私钥,终端返回的The agent has no identities.就是明确提示,和设备上的历史GitHub账号登录记录无直接关联,多账号场景只要配置规则正确可以完全共存,无需反复删除重生成密钥。
分步解决操作
- 启动SSH代理并加载目标私钥
先在终端执行代理启动命令:eval "$(ssh-agent -s)"
命令执行后返回Agent pid 数字即代表代理启动成功。
接着加载你新生成的私钥文件,若你生成的是默认命名的ed25519类型密钥,执行:ssh-add ~/.ssh/id_ed25519
若你生成的是RSA类型密钥,将路径替换为~/.ssh/id_rsa即可。加载完成后重新执行ssh-add -l -E sha256,能看到对应密钥的SHA256指纹即代表加载成功,该指纹需要和你上传到GitHub后台的公钥指纹完全匹配。 - 配置多账号SSH规则(双账号必须配置,否则会出现密钥匹配错乱)
在~/.ssh/路径下找到名为config的文件(无后缀,不存在则手动新建),写入以下配置,为两个账号分别设置独立Host别名:
注意配置项里的# 账号1配置 Host github-main HostName github.com User git IdentityFile ~/.ssh/对应账号1的私钥文件路径 IdentitiesOnly yes # 账号2配置 Host github-second HostName github.com User git IdentityFile ~/.ssh/对应账号2的私钥文件路径 IdentitiesOnly yesIdentitiesOnly yes必须添加,作用是强制SSH只使用指定路径的密钥发起认证,避免自动遍历本地所有密钥导致认证失败。 - 修正本地仓库的远程地址
配置完Host别名后,不能再使用默认的git@github.com:用户名/仓库名.git格式的远程地址,需要根据仓库所属账号替换Host部分。例如当前操作的仓库属于第二个账号,就在仓库根目录执行:git remote set-url origin git@github-second:对应账号的用户名/仓库名.git - 连通性校验
执行对应账号的SSH测试命令,例如测试第二个账号连通性:ssh -T git@github-second
若返回Hi 账号用户名! You've successfully authenticated, but GitHub does not provide shell access.即代表认证链路完全正常,此时再执行git push即可正常推送。
常见踩坑说明
- Windows系统如果在PowerShell下执行
ssh-add报错,直接打开系统服务面板,找到「OpenSSH Authentication Agent」服务,将启动类型设置为「自动」并手动启动服务后,再重新执行密钥加载命令即可。 - 每个SSH公钥只能绑定一个GitHub账号,不要把同一个公钥重复上传到两个账号后台,会直接触发公钥冲突报错。
- 如果你使用的是VSCode内置终端,配置完成后建议重启一次VSCode,避免内置终端未同步最新的SSH代理环境变量导致配置不生效。
内容的提问来源于stack exchange,提问作者Danai
相关产品推荐
相关产品推荐

