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

使用YubiKey签名Git提交遇异常,求排查方案

问题原因及解决步骤

你的问题核心是导出密钥时误包含了子密钥的私钥,导致另一台电脑本地拥有签名私钥,无需依赖YubiKey即可完成签名。以下是具体分析和修复方案:

错误根源

迁移子密钥到YubiKey后,本地应仅保留主公钥的私钥(建议离线备份,日常不使用),子密钥的私钥应仅存储在YubiKey中,本地的子密钥私钥条目需被删除。但你在导出密钥时,大概率使用了导出私钥的命令(如gpg --export-secret-subkeys或gpg --export-secret-keys),导致子密钥私钥被导出并导入到另一台电脑,因此该设备无需YubiKey即可签名。

修复步骤

1. 验证原电脑的密钥状态

插入YubiKey,执行以下命令查看密钥详情:

gpg -K
  • 正确状态:子密钥行以ssb>开头(表示私钥存储在智能卡/YubiKey上),主公钥行若已离线备份则显示sec#(#表示私钥不在本地)。
  • 若子密钥行仅显示ssb(无>),说明本地仍保留子密钥私钥,需重新执行子密钥迁移步骤,迁移时务必确认删除本地私钥。

2. 重新导出纯公钥

在原电脑上,仅导出不含私钥的公钥文件:

gpg --export --armor <你的主密钥ID> > public-key.asc

该文件仅包含主公钥和子密钥的公钥部分,无任何私钥信息。

3. 清理另一台电脑的错误密钥

在目标电脑上:

  1. 列出本地密钥,找到需删除的私钥:
    gpg -K
    
  2. 删除本地的子密钥私钥(或整个密钥对):
    # 删除子密钥私钥
    gpg --delete-secret-keys <子密钥ID>
    # 若需彻底清理,再删除公钥
    gpg --delete-keys <主密钥ID>
    
  3. 重新导入正确的公钥文件:
    gpg --import public-key.asc
    
  4. 标记密钥为信任(可选但建议):
    gpg --edit-key <主密钥ID>
    # 输入trust,选择5(ultimate trust),输入save退出
    

4. 配置目标电脑的Git与GPG

  1. 插入YubiKey,验证设备识别:
    gpg --card-status
    
  2. 配置Git使用YubiKey上的签名密钥:
    git config --global user.signingkey <签名子密钥ID>
    git config --global commit.gpgsign true
    

完成上述操作后,目标电脑必须插入YubiKey才能执行签名操作,因为本地仅存储公钥,私钥仅存在于YubiKey中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:15:32