Git推送报错Permission denied(publickey),无法推送至GitHub求助
解决GitHub推送Permission denied (publickey)问题
看起来你这情况大概率是昨天给Digital Ocean生成SSH密钥时,要么覆盖了原来GitHub用的密钥,要么SSH客户端现在默认用新密钥去连GitHub,导致权限验证失败了。我给你一步步排查解决:
1. 先确认SSH当前用的是哪个密钥
打开终端运行:
ssh -v git@github.com
看输出里的debug1: Offering public key:这一行,后面跟着的就是当前SSH尝试用的私钥路径。如果这个路径是你昨天给DO生成的新密钥,那就是问题所在了。
2. 检查GitHub上的公钥是否还存在
登录GitHub,进入「Settings」→「SSH and GPG keys」,看看原来绑定的SSH公钥是不是还在列表里。如果被误删或者替换了,那肯定连不上。
3. 配置SSH Config区分不同主机的密钥
这是最稳妥的解决办法,避免不同服务的SSH密钥冲突。
- 打开(没有就新建)
~/.ssh/config文件:nano ~/.ssh/config - 粘贴以下配置(替换成你自己的密钥文件名和服务器信息):
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa # 这里填你原来GitHub用的私钥文件名,比如id_rsa或者id_ed25519 Host do-droplet HostName 你的Digital Ocean服务器IP User root # 或者你的服务器登录用户名 IdentityFile ~/.ssh/do_rsa # 这里填你给DO生成的私钥文件名 - 保存退出(nano里按
Ctrl+O,回车,再Ctrl+X)
4. 修复密钥权限(重要!)
SSH对密钥文件权限要求很严,权限不对会直接拒绝使用:
chmod 600 ~/.ssh/你的GitHub私钥文件 chmod 644 ~/.ssh/你的GitHub公钥文件 chmod 600 ~/.ssh/你的DO私钥文件
5. 测试GitHub连接
运行:
ssh -T git@github.com
如果看到Hi 你的GitHub用户名! You've successfully authenticated, but GitHub does not provide shell access.,说明验证成功了。
6. 重新推送代码
回到你的项目目录,再运行:
git push -u origin master # 如果你的默认分支是main就改成main
额外情况:如果原来的GitHub密钥被覆盖了
如果昨天生成DO密钥时不小心覆盖了GitHub的密钥,那得重新生成GitHub的SSH密钥:
- 生成新密钥:
一路回车就行,不用设置密码(除非你需要)。ssh-keygen -t ed25519 -C "你的GitHub绑定邮箱" - 复制公钥内容:
cat ~/.ssh/id_ed25519.pub - 把复制的内容粘贴到GitHub的「SSH and GPG keys」里,新建一个密钥。
这样应该就能解决问题了,我之前帮好几个同事处理过类似的密钥冲突问题,这套流程基本都能搞定。
内容的提问来源于stack exchange,提问作者Ryan Dhungel
相关产品推荐
相关产品推荐

