You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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密钥:

  1. 生成新密钥:
    ssh-keygen -t ed25519 -C "你的GitHub绑定邮箱"
    
    一路回车就行,不用设置密码(除非你需要)。
  2. 复制公钥内容:
    cat ~/.ssh/id_ed25519.pub
    
  3. 把复制的内容粘贴到GitHub的「SSH and GPG keys」里,新建一个密钥。

这样应该就能解决问题了,我之前帮好几个同事处理过类似的密钥冲突问题,这套流程基本都能搞定。

内容的提问来源于stack exchange,提问作者Ryan Dhungel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:53:00