自从我的 xenial 工作站最近进行了一些软件包升级后,我发现我无法再签署 Git 提交,我会收到如下错误消息,并且不再弹出对话框来输入我的密钥密码:
$ git commit -S
error: gpg failed to sign the data
fatal: failed to write commit object
经过一番搜索,我发现2016 年页面谈论 pinentry 和 gpg2 之间的不匹配(我gpg2
在我的 GPG 程序中设置为.gitconfig
),事实上就像他们提到的那样,我有 gpg2 2.1.x 和 pinentry 0.9.x:
$ gpg2 --version
gpg (GnuPG) 2.1.11
libgcrypt 1.6.5
$ pinentry --version
pinentry-gnome3 (pinentry) 0.9.7
他们建议的另一项测试同样失败了
$ echo test | gpg2 --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
test
gpg: signing failed: Operation cancelled
gpg: [stdin]: clearsign failed: Operation cancelled
我正在运行 gpg-agent,但我不知道重新运行它是否会破坏它gpg-agent
。似乎没有任何服务可以启动它。
我不确定最近的更新是否确实将 gnupg2 包升级到了 2.1.x,但我无论如何也找不到可以尝试降级到的 2.0.x,或者 xenial 的 1.x pinentry。
我刚才查看的页面是不是在转移视线?我该如何重新签署文件?
附言:几天后它又开始工作了,但我不知道我做了什么;看起来没什么不同。也许重启就可以解决问题?:/
$ gpg2 --version
gpg (GnuPG) 2.1.11
libgcrypt 1.6.5
...
$ pinentry --version
pinentry-gnome3 (pinentry) 0.9.7
...
$ echo test | gpg2 --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
test
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAEBCAAGBQJbT0xjAAoJEAnk6ni30keKELoP/iGeP7PkxEsJSmCwgUMJpqWq
qIV/hobcZ2iqLi5WjCMtEAmJRwVu89GT0MW2wHl28t5+iJriW67pg4MoT1zKGSPN
答案1
我知道这已经很老套了,但是对于遇到这个问题的人来说,你可能忘记运行了git config --global user.signingkey yourkey
。
答案2
我遇到了同样的问题,原因是我的 GPG 密钥已到期。
thech 中,seahorse
您可以用 git 配置中的 key 来查看 key 的状态,或者在控制台中使用
YOURKEY=$(git config -l | grep signingkey | cut -d"=" -f 2)
gpg2 -K --keyid-format SHORT | grep $YOURKEY -A3
编辑你的密钥,以便它不会太快过期,然后将其添加到你的全局配置中
git config --global user.signingkey $YOURKEY
也许重新启动系统以应用更改