已关联GitHub SSH密钥仍遇权限拒绝,如何解决远程Git推送错误?
解决GitHub SSH推送时的Permission Denied (publickey)问题
我来帮你一步步排查这个问题,这种SSH权限拒绝的情况其实挺常见的,咱们从几个关键点入手:
1. 先确认本地SSH密钥是否在正常工作
有时候系统不会自动加载你的SSH密钥,导致GitHub识别不到。你可以先检查当前代理里的密钥:
ssh-add -l
如果输出里看不到你的密钥指纹,就手动加载它(默认私钥路径是~/.ssh/id_rsa,如果你的密钥名不一样就替换成对应的):
ssh-add ~/.ssh/id_rsa
然后测试和GitHub的SSH连通性:
ssh -T git@github.com
如果成功,会看到类似Hi 你的用户名! You've successfully authenticated, but GitHub does not provide shell access.的提示,这说明密钥本身是没问题的;如果还是报错,那大概率是密钥和GitHub的关联出了问题。
2. 核对GitHub上的公钥和本地是否完全匹配
- 先查看本地公钥的完整内容:
cat ~/.ssh/id_rsa.pub
- 登录GitHub,进入「Settings」→「SSH and GPG keys」,找到你添加的公钥,仔细核对内容:要确保从
ssh-rsa开头到末尾的邮箱/备注完全一致,不能有多余的空格、换行或者拼写错误。
3. 检查自定义SSH配置文件(如果有的话)
如果你之前修改过~/.ssh/config文件,可能里面的配置会干扰GitHub的SSH连接。你可以查看一下:
cat ~/.ssh/config
针对GitHub的配置应该是这样的(如果没有就不用管):
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa
如果里面有错误的配置(比如指定了不存在的密钥路径),就修改或删除对应的条目。
4. 确认仓库的访问权限和地址正确性
- 确保你是这个新建仓库的所有者,或者已经被添加为有推送权限的协作者;
- 检查
git remote -v输出的仓库地址:git@github.com:user/repo2.git里的repo2必须和你在GitHub上创建的仓库名称完全一致,大小写也要注意(GitHub仓库名是区分大小写的)。
5. 用详细日志定位深层问题
如果上面的步骤都没解决,你可以开启SSH的详细日志,看看连接过程中到底哪里出了问题:
ssh -vT git@github.com
日志里会详细显示系统尝试使用哪些密钥、每一步的连接状态,你可以根据日志里的错误提示(比如“Offer public key: ... rejected”)来进一步排查。
等你确认以上步骤都没问题后,再重新执行推送命令:
git push -u origin main
内容的提问来源于stack exchange,提问作者Kosmo
相关产品推荐
相关产品推荐

