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

使用gpg-agent生成密钥后,Github接受公钥但仍提示Permission denied (publickey)的问题求助

解决gpg-agent签名失败导致Github SSH连接Permission denied的问题

从你提供的ssh -vT git@github.com调试输出来看,核心问题是gpg-agent拒绝了签名请求,也就是这行关键错误:

sign_and_send_pubkey: signing failed for RSA "(none)" from agent: agent refused operation

我之前碰到过几乎一模一样的情况,下面是亲测有效的排查和修复步骤:

1. 确认gpg-agent的SSH支持配置

首先检查gpg-agent是否开启了SSH代理功能:

  • 打开~/.gnupg/gpg-agent.conf文件,确保包含这一行:
    enable-ssh-support
    
  • 如果没添加,保存文件后重启gpg-agent:
    gpg-connect-agent reloadagent /bye
    

2. 标记密钥为完全信任

gpg-agent拒绝签名大概率是因为你的密钥没有被设置为受信任状态:

  • 列出本地的gpg密钥:
    gpg --list-secret-keys --keyid-format LONG
    
  • 找到你用于SSH的密钥ID(比如输出里RSA 4096/ABCDE1234567890中的ABCDE1234567890),然后编辑密钥信任:
    gpg --edit-key ABCDE1234567890
    
  • 在交互界面输入trust,选择5 = I trust ultimately,最后输入save退出。

3. 确保SSH_AUTH_SOCK环境变量正确

SSH客户端需要通过正确的套接字和gpg-agent通信:

  • 先检查当前变量值:
    echo $SSH_AUTH_SOCK
    
  • 正常应该指向gpg-agent的SSH套接字,比如/run/user/1000/gnupg/S.gpg-agent.ssh
  • 如果不对,在你的shell配置文件(~/.bashrc、~/.zshrc等)中添加:
    export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
    
  • 重新加载配置:
    source ~/.bashrc
    

4. 验证密钥已导入gpg-agent

确认你的密钥已经被gpg-agent识别:

  • 执行ssh-add -l(小写L),检查输出里是否有你的密钥指纹
  • 如果看不到,尝试手动导入:
    gpg-connect-agent updatestartuptty /bye
    ssh-add ~/.gnupg/private-keys-v1.d/[你的密钥文件名].key
    
    (密钥文件名可以通过gpg --list-secret-keys找到对应的路径)

5. 直接测试gpg签名功能

先排除gpg本身的问题:

  • 创建一个测试文件:
    echo "test" > test.txt
    
  • 用你的密钥签名:
    gpg --sign test.txt
    
  • 如果能正常弹出密码框(或无密码直接生成test.txt.gpg),说明gpg-agent签名功能正常;如果报错,就需要先修复gpg的基础配置。

完成以上步骤后,再重新运行ssh -vT git@github.com测试,应该就能正常通过公钥认证了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:43:14