使用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/[你的密钥文件名].keygpg --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
相关产品推荐
相关产品推荐

