推送代码到GitHub提示Permission denied(publickey)如何解决
GitHub SSH推送报publickey权限拒绝排查方案
对应终端报错信息如下:
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
按以下顺序逐步排查即可解决:
1. 确认本地SSH密钥已被代理加载
- 先在Cmder中启动SSH代理:如果用的是Cmder的bash环境,执行
eval $(ssh-agent -s);如果是PowerShell/cmd环境,执行start-ssh-agent - 执行密钥添加命令,默认生成的RSA密钥执行
ssh-add ~/.ssh/id_rsa即可,如果生成密钥时自定义了文件名,替换为对应私钥的实际路径 - 执行
ssh-add -l验证,如果输出了对应密钥的指纹信息,说明加载成功;如果提示无对应密钥,回到密钥生成目录确认私钥文件名、路径是否正确。
2. 确认公钥已正确绑定GitHub账号
- 找到密钥对应的公钥文件(后缀为
.pub的文件,默认路径为~/.ssh/id_rsa.pub),用文本编辑器打开后完整复制全部内容,不要遗漏开头的加密类型标识、结尾的邮箱注释,也不要额外复制空格或换行 - 进入GitHub账号的SSH密钥设置页面,新增SSH密钥,将复制的公钥内容粘贴后保存。注意不要泄露无
.pub后缀的私钥文件内容。 - 执行
ssh -T git@github.com验证连通性,如果返回Hi 你的GitHub用户名! You've successfully authenticated, but GitHub does not provide shell access.说明密钥认证链路正常;如果仍报权限错误,回到上一步检查公钥是否复制完整、是否绑定到了正确的GitHub账号。
3. 检查本地仓库远程地址配置
- 进入本地项目目录,执行
git remote -v查看origin远程仓库地址,正确的SSH格式地址应为git@github.com:你的GitHub用户名/目标仓库名.git - 如果地址是
https://github.com/xxx/xxx.git这类HTTPS格式,执行git remote set-url origin git@github.com:你的GitHub用户名/目标仓库名.git替换为SSH地址 - 核对地址中的用户名、仓库名是否存在拼写错误、大小写错误,地址不匹配对应不存在的仓库时也会抛出同类报错。
4. 特殊场景处理
- 本地存在多对SSH密钥对应多个账号/平台时,需要在
~/.ssh/config文件中添加配置,指定访问GitHub时使用的私钥,配置示例:
Host github.com HostName github.com User git IdentityFile ~/.ssh/你给GitHub使用的私钥文件路径 IdentitiesOnly yes
- 如果处于公司网络、开启了网络代理导致22端口被拦截,可以修改上述配置,将SSH连接走443端口:
Host github.com HostName ssh.github.com User git Port 443 IdentityFile ~/.ssh/你给GitHub使用的私钥文件路径 IdentitiesOnly yes
- 如果目标仓库不是你个人账号下的仓库,确认当前绑定密钥的账号已经被添加为仓库协作者,拥有推送权限。
内容的提问来源于stack exchange,提问作者Zein Mayhoub
相关产品推荐
相关产品推荐

