使用 SSH 密钥进行 Git 提交签名 — 关于 allowedSignersFile 的顽固错误

使用 SSH 密钥进行 Git 提交签名 — 关于 allowedSignersFile 的顽固错误

我正在尝试使用 SSH 密钥(而不是 PGP/GPG)设置 git 提交签名。这是一个相对较新的功能,于git 2.34

我确实遵循了所有的步骤(详细记录在man git-config gpg.ssh部分以及博客):

  • git config gpg.format ssh
  • git config gpg.ssh.allowedSignersFile ~/.config/git/allowed_ssh_signers
  • git config user.signingKey ~/.ssh/git-key.ed25519
  • git config commit.sign true

之后,签名确实发生了——我可以看到gpgsig -----BEGIN SSH SIGNATURE-----中的字段git show --pretty=raw <commit>。但验证似乎被破坏了:

$ git show --show-signature HEAD
error: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh signature verification
commit 5957261166c2bfc8e2ef77094c74f95bcb50577b (HEAD -> main)
No signature
Author: max ulidtko <[email protected]>
Date:   Fri Jun 17 17:05:47 2022 +0300

    test ssh commit sign 6
$
$ git show --pretty=raw HEAD
commit 5957261166c2bfc8e2ef77094c74f95bcb50577b
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author max ulidtko <[email protected]> 1655474747 +0300
committer max ulidtko <[email protected]> 1655474747 +0300
gpgsig -----BEGIN SSH SIGNATURE-----
 U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgLzSyuIgqnSPQxnUlPhcdiKg/36
 INE7hSMLVQJLWMuo4AAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5
 AAAAQLnpQYbrfYYJe0rTIEW8hruTRmn4kcKhwhurrA9bKMnXd5b7W0wvl7auYS8LlBBXy7
 SqpIjZunnUE/EI2Q4Xiw8=
 -----END SSH SIGNATURE-----

    test ssh commit sign 6
$
$ cat $(git config gpg.ssh.allowersignersfile)
───────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: /home/ulidtko/.config/git/allowed_ssh_signers
       │ Size: 99 B
───────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ [email protected] ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC80sriIKp0j0MZ1JT4XHYioP9+iDRO4UjC1UCS1jLqO
───────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
$
$ git --version
git version 2.36.1

如图所示,它抱怨的文件确实存在,并且具有预期的格式。(我已将其cat别名为bat

出了什么问题?这可能是一个已知错误吗?

答案1

值得一提的是,经过第三或第四次尝试,我终于成功了。在 2 台机器上:

操作系统 git --version SSH-V
Ubuntu 22.04.3 LTS 卡米 2.34.1 OpenSSH_8.9p1 Ubuntu-3ubuntu0.4,OpenSSL 3.0.2 2022 年 3 月 15 日
Arch Linux,上次完整更新于 2022-11-21 2.38.1 OpenSSH_9.1p1,OpenSSL 3.0.7 2022 年 11 月 1 日

提交图日志--show-signature现在看起来如预期的那样(两台机器使用不同的密钥签名):

带签名的 git log graph

不幸的是,我还没有意识到之前尝试时我做错了什么。现在一切正常¯\_(ツ)_/¯

设置并不容易最小化:我使用 git 跟踪的点文件、子模块,并且涉及大量符号链接。无论如何,它开始在附近某个地方工作这次提交— HTH

相关内容