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

GPG认证子密钥导出SSH公钥报invalid format错误如何排查

问题根因

这个invalid format报错是GPG子密钥对接SSH场景的典型配置错误,和密钥本身损坏无关,核心诱因两点:

  • 配置逻辑误解:gpg --export-ssh-key导出的仅为SSH格式公钥文本,GPG认证子密钥的私钥始终存储在GnuPG密钥环内,不会生成独立的私钥文件存放在~/.ssh目录。在SSH配置中将IdentityFile直接指向.pub公钥文件时,OpenSSH会默认将传入路径对应的文件作为私钥解析,公钥格式完全不符合私钥加载规范,直接触发格式错误。
  • 导出操作不规范:如果导出ED25519子密钥时没有指定精确的子密钥ID,可能导出已吊销的RSA子密钥、或非认证用途的子密钥公钥;部分2.2.x及更早版本的GnuPG导出ED25519公钥时还会出现前缀错误、内容截断问题,导出的公钥本身不符合OpenSSH格式标准。
修复步骤

按顺序操作即可解决:

  1. 重新导出正确的ED25519认证子密钥公钥
    先执行命令查看所有子密钥信息,找到带[A](认证权限)标记的ED25519子密钥ID和对应的keygrip:
    gpg -K --with-keygrip
    
    导出公钥时在子密钥ID后加!后缀,强制GnuPG仅导出指定子密钥,避免导错:
    # 替换<ED25519认证子密钥ID>为上一步查到的子密钥ID
    gpg --export-ssh-key <ED25519认证子密钥ID>! > ~/.ssh/id_gpg_gh.pub
    
    导出后检查文件内容,合法的ED25519 SSH公钥必须以ssh-ed25519 开头,整行无乱码、无多余换行。
  2. 修正SSH配置
    编辑~/.ssh/config中GitHub对应的配置段,IdentityFile路径去掉.pub后缀,不要直接指向公钥文件:
    Host github.com
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_gpg_gh
        IdentitiesOnly yes
    
    OpenSSH会自动匹配同路径下的.pub文件作为公钥标识广播,实际签名认证请求会转发给gpg-agent处理,不会尝试直接加载公钥作为私钥。
  3. 配置gpg-agent接管SSH认证
    编辑~/.gnupg/gpg-agent.conf,开启SSH支持并指定要使用的认证子密钥:
    enable-ssh-support
    # 替换<ED25519认证子密钥keygrip>为第一步查到的对应keygrip值
    SSHKEY <ED25519认证子密钥keygrip>
    
    保存后重载gpg-agent生效,同时清空ssh-agent缓存的旧密钥,避免已吊销的RSA子密钥干扰:
    gpgconf --kill gpg-agent
    gpg-connect-agent /bye
    ssh-add -D
    
  4. 验证结果
    执行测试命令验证连通性:
    ssh -T git@github.com
    
    正常返回如下提示即为配置成功:

    Hi <你的GitHub用户名>! You've successfully authenticated, but GitHub does not provide shell access.


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:42:28