配置多Git账号后推送GitHub遇Permission denied(publickey)错误求助
解决多Git账号SSH密钥权限问题
核心问题
多Git账号共存时,SSH默认只会尝试使用默认密钥文件,导致非默认账号的密钥无法被正确匹配,从而触发权限拒绝错误。以下是针对性解决步骤:
1. 创建/修改SSH配置文件
Windows系统下,SSH配置文件路径为C:\Users\<你的用户名>\.ssh\config,如果没有该文件直接新建即可。按账号分别配置规则,强制指定每个账号对应的密钥:
# 个人GitHub账号 Host github-personal HostName github.com User git IdentityFile ~/.ssh/id_ed25519-personal # 替换成你的个人私钥文件名 IdentitiesOnly yes # 工作GitHub账号 Host github-work HostName github.com User git IdentityFile ~/.ssh/id_ed25519-work # 替换成你的工作私钥文件名 IdentitiesOnly yes # 学校GitLab账号(保留现有正常配置即可) Host gitlab-school HostName <你的学校GitLab域名> User git IdentityFile ~/.ssh/id_ed25519-school IdentitiesOnly yes
注:
IdentitiesOnly yes的作用是强制SSH仅使用指定的密钥,避免ssh-agent自动尝试其他密钥导致权限验证失败。
2. 更新本地仓库的远程地址
将个人/工作GitHub仓库的远程地址,从默认的git@github.com:<用户名>/<仓库名>.git替换为配置文件中定义的Host别名:
- 个人仓库更新命令:
git remote set-url origin github-personal:YourPersonalUsername/your-repo.git - 工作仓库更新命令:
git remote set-url origin github-work:YourWorkUsername/your-work-repo.git
3. 验证配置有效性
分别测试个人和工作账号的SSH连接:
- 测试个人账号:
正常返回应为:ssh -T github-personalHi YourPersonalUsername! You've successfully authenticated, but GitHub does not provide shell access. - 测试工作账号同理:
ssh -T github-work
4. 额外排查点
- 确认GitHub账号下添加的公钥,与本地对应私钥的
.pub文件内容完全一致(无多余空格、换行) - 调整私钥文件权限:Windows系统右键私钥文件→属性→安全→高级,设置仅当前用户拥有读取权限,删除其他用户的权限(SSH会拒绝使用权限过宽的私钥)
- 若之前用HTTPS方式连接过仓库,可能存在凭证缓存,可运行
git config --global --unset credential.helper清除缓存后再测试
内容的提问来源于stack exchange,提问作者NaanBaysa
相关产品推荐
相关产品推荐

