其 key-id 在签名中的密钥没有签署此提交
The key whose key-id is in the signature did not sign this commit
我正在尝试签署我的 git 提交,但是当我将它们推送到 GitHub 时,它们有 Unverified
徽章和
The key whose key-id is in the signature did not sign this commit. Someone may be trying to trick you. GPG key ID: mykeyid
我觉得这很神秘,在我的世界中,用于签署提交的 ID 将出现在签名中,因为具有该 ID 的密钥签署了提交!
Question How is this possible, and how do I solve it?
我特别希望能够从我的 IDE 中自动签署提交,而无需每次都输入我的密码。
如果有兴趣,这里是我所做的相关步骤的总结。前几个与 GitHub 的签名提交指南一致。
- 生成密钥对,将
--armor --export
给的GPG密钥添加到GitHub账户
- 更新 git 配置
user.signingkey
。
- 将提交设置为默认使用
git config --global commit.gpgsign true
签名。
- git自带的gpg版本太旧,我安装了gpg 2,用
gpg --version
检查过,我更新了GNUPGHOME
以防万一
- 制作了一个脚本
C:\Users\username\gpg-no-tty.sh
并放入其中echo mypassphrase | gpg --passphrase-fd 0 --batch --no-tty --yes "$@"
。找不到比明文密码更好的东西了。
- 使用
git config --global gpg.program C:\Users\username\gpg-no-tty.sh
将 git 指向此脚本。
验证
- 重要提示:我已验证
git verify-commit HEAD
显示与我的 git 配置中的 signingkey
相同的 ID,这与我在设置中显示的 GitHub GPG 密钥相同. (还会输出警告gpg: WARNING: unsafe permissions on homedir
)
- 同样重要的是,正如 Ferrybig 在评论中提到的,我检查了我在 git 配置中的电子邮件是否与我的 gpg 密钥所用的电子邮件相同,是否与 [=] 中用作主要(已验证)电子邮件的电子邮件相同99=].
- 正如 Jens Erat 在评论中提到的,您还可以使用指纹(40 个字符串)代替
gpg --list-secret-keys --keyid-format LONG
输出的长 ID(16 个字符),我在 [=94] 中尝试过=]config 但它没有帮助。
gpg-agent
正如 Daniel H 在评论中所建议的那样,有类似 gpg-agent 的东西应该记住你的密码,这就是我试过的:
- 将
use-agent
和 no-tty
(与我的 IDE 不期望控制台界面要求密码有关)添加到 C:\Users\username\.gnupg\gpg.conf
,更改 gpg.program
在我的 .gitconfig
到 gpg
- 加上
C:/Users/username/.gnupg/gpg-agent.conf
的生存时间:default-cache-ttl 34560000
和max-cache-ttl 34560000
- 我得到
gpg: gpg-agent is not available in this session
,但还没有找到解决方法。 gpg-agent
和 gpg
都是 2.2.1 版本,所以这不是问题。
- 根据一些消息来源,对于 gpg 版本 > 2.1,环境变量
GPG_AGENT_INFO
需要指向 C:\Users\username\.gnupg\S.gpg-agent
。我这样做并重新启动。现在我得到 gpg: gpg-agent protocol version 0 is not supported
.
- 我将
:1
添加到该路径,现在我得到 gpg: can't connect to 'C': invalid value
。这对我来说没有任何意义。什么是 C,它来自哪里?是我的驱动器号,所以 gpg 尝试将路径作为对象执行?
您可以在创建密钥时不设置密码,也可以尝试使用 gpg-agent。对我来说它没有用,我仍然必须提供密码,但值得一试:
将 git 至少更新到 2.19.1,因为它现在包含 gpg2,请确保您使用 git 的 gpg 并尝试再次使用 gpg-agent - 它现在应该可以工作了。您的 'gpg-agent' 步中只有第 2 步就足够了。
如果您 运行 遇到迁移问题,您可能需要删除包含密钥的 ~\.gnupg
目录(注意错误消息可能具有误导性),因此您可以使用以下命令重新生成所有内容(包括密钥) git 的 gpg。
我已经在中写下了完整的说明。
我正在尝试签署我的 git 提交,但是当我将它们推送到 GitHub 时,它们有 Unverified
徽章和
The key whose key-id is in the signature did not sign this commit. Someone may be trying to trick you. GPG key ID: mykeyid
我觉得这很神秘,在我的世界中,用于签署提交的 ID 将出现在签名中,因为具有该 ID 的密钥签署了提交!
Question How is this possible, and how do I solve it?
我特别希望能够从我的 IDE 中自动签署提交,而无需每次都输入我的密码。
如果有兴趣,这里是我所做的相关步骤的总结。前几个与 GitHub 的签名提交指南一致。
- 生成密钥对,将
--armor --export
给的GPG密钥添加到GitHub账户 - 更新 git 配置
user.signingkey
。 - 将提交设置为默认使用
git config --global commit.gpgsign true
签名。 - git自带的gpg版本太旧,我安装了gpg 2,用
gpg --version
检查过,我更新了GNUPGHOME
以防万一 - 制作了一个脚本
C:\Users\username\gpg-no-tty.sh
并放入其中echo mypassphrase | gpg --passphrase-fd 0 --batch --no-tty --yes "$@"
。找不到比明文密码更好的东西了。 - 使用
git config --global gpg.program C:\Users\username\gpg-no-tty.sh
将 git 指向此脚本。
验证
- 重要提示:我已验证
git verify-commit HEAD
显示与我的 git 配置中的signingkey
相同的 ID,这与我在设置中显示的 GitHub GPG 密钥相同. (还会输出警告gpg: WARNING: unsafe permissions on homedir
) - 同样重要的是,正如 Ferrybig 在评论中提到的,我检查了我在 git 配置中的电子邮件是否与我的 gpg 密钥所用的电子邮件相同,是否与 [=] 中用作主要(已验证)电子邮件的电子邮件相同99=].
- 正如 Jens Erat 在评论中提到的,您还可以使用指纹(40 个字符串)代替
gpg --list-secret-keys --keyid-format LONG
输出的长 ID(16 个字符),我在 [=94] 中尝试过=]config 但它没有帮助。
gpg-agent
正如 Daniel H 在评论中所建议的那样,有类似 gpg-agent 的东西应该记住你的密码,这就是我试过的:
- 将
use-agent
和no-tty
(与我的 IDE 不期望控制台界面要求密码有关)添加到C:\Users\username\.gnupg\gpg.conf
,更改gpg.program
在我的.gitconfig
到gpg
- 加上
C:/Users/username/.gnupg/gpg-agent.conf
的生存时间:default-cache-ttl 34560000
和max-cache-ttl 34560000
- 我得到
gpg: gpg-agent is not available in this session
,但还没有找到解决方法。gpg-agent
和gpg
都是 2.2.1 版本,所以这不是问题。 - 根据一些消息来源,对于 gpg 版本 > 2.1,环境变量
GPG_AGENT_INFO
需要指向C:\Users\username\.gnupg\S.gpg-agent
。我这样做并重新启动。现在我得到gpg: gpg-agent protocol version 0 is not supported
. - 我将
:1
添加到该路径,现在我得到gpg: can't connect to 'C': invalid value
。这对我来说没有任何意义。什么是 C,它来自哪里?是我的驱动器号,所以 gpg 尝试将路径作为对象执行?
您可以在创建密钥时不设置密码,也可以尝试使用 gpg-agent。对我来说它没有用,我仍然必须提供密码,但值得一试:
将 git 至少更新到 2.19.1,因为它现在包含 gpg2,请确保您使用 git 的 gpg 并尝试再次使用 gpg-agent - 它现在应该可以工作了。您的 'gpg-agent' 步中只有第 2 步就足够了。
如果您 运行 遇到迁移问题,您可能需要删除包含密钥的 ~\.gnupg
目录(注意错误消息可能具有误导性),因此您可以使用以下命令重新生成所有内容(包括密钥) git 的 gpg。
我已经在