如何使用SSH密钥签名Git提交?含配置报错与密钥备份问题
Git SSH密钥签名配置及密钥备份方案
签名配置报错问题解决
你已经正确设置了gpg.format = ssh和commit.gpgsign = true,不需要额外修改gpg.program配置,签名失败和GitHub显示校验不通过的问题按以下步骤修正即可:
- 修正
user.signingKey参数取值,二选一即可:- 最简单的填法:直接写签名用私钥的本地路径,ed25519默认密钥直接执行以下命令配置即可
git config --global user.signingkey ~/.ssh/id_ed25519- 如果密钥已经加载到ssh-agent,也可以填公钥的核心内容,注意必须删掉公钥末尾的邮箱后缀,也就是只保留
ssh-ed25519 <公钥字符串>部分,不要带最后面类似user@domain.io的注释内容。你之前传入了完整公钥带邮箱注释,是导致校验失败的原因之一。
- 检查GitHub端公钥配置:GitHub对SSH登录密钥和SSH签名密钥做了隔离,你需要在账号的SSH密钥设置页面,选择「签名密钥」类型上传你的公钥,之前如果把公钥加到了登录认证密钥列表里,是无法通过提交签名校验的。
- 版本校验:确保本地安装的Git版本≥2.34.0,低版本的SSH签名实现逻辑和GitHub的校验规则不兼容,会出现签名格式错误。
之前配置GPG签名时用到的
GPG_TTY环境变量对SSH签名流程无效,不需要针对SSH签名额外配置该参数,只要确保ssh-agent正常加载了对应私钥即可正常签名。
签名密钥安全备份方案
不要明文存储密钥到网盘,行业通用的安全备份方案按优先级排序如下:
- 硬件离线备份(最高安全等级):将设置了强passphrase的私钥文件拷贝到加密U盘/硬件密钥设备中,物理存放在安全位置,全程不联网可杜绝网络窃取风险
- 端到端加密工具存储:将私钥内容作为加密笔记存入支持端到端加密的密码管理器,这类工具本身加密强度足够,只要主密码不泄露就不会出现密钥泄露或丢失问题
- 纸质备份:ed25519类型密钥长度较短,可以将私钥转成base64编码后打印在纸上物理存放,需要恢复时手动输入即可,完全规避数字渠道的泄露风险
注意:所有备份的密钥必须在生成时设置足够强度的passphrase,就算备份介质遗失,没有passphrase也无法冒用你的密钥签名。
内容的提问来源于stack exchange,提问作者user16435030
相关产品推荐
相关产品推荐

