每次 Git commit 都要求输入 OpenPGP 密钥,请问如何解决?

12
我长期以来一直是 Linux 用户,最近开始使用 MacBook。作为设置过程的一部分,我做了通常的“启动 Git”,其中包括创建一个 SSH 密钥。所有这些都很顺利。我还必须安装 GPG,因为只有在我的提交被签名时 Git 才可以让我进行提交。我生成了密钥,并设置了密码。它工作正常,我可以自由地提交!但是,每当我尝试提交任何东西时,都会收到以下消息并被迫输入密码:“请输入解锁 OpenPGP 秘密密钥的密码:”。我已经在互联网上搜索了很多文章,关于如何在 git push 时记住您的密码(我已经配置过了),以及其他各种无关的文章。我的同事没有这个问题,我找不到不必每次输入密码的方法。希望有一个超级简单的教程,我错过了,因为我不知道正确的关键字。提前感谢。

我不会对每个提交进行pgp签名,也不确定是否有一种方法将其挂钩到OS X Keychain中,但我只是想问一下:你确定要对每个提交进行pgp签名吗?大多数人不这样做,因为它带来的好处相对较小,而且很麻烦。 - torek
我并不是特别想使用pgp签名,只是git不让我提交代码而已。(具体错误我记不清了,这是几周前的事情了)如果我可以禁用pgp签名并自由提交代码那就好了。 - TheCog19
提交签名请求由commit.gpgSign控制(如果没有给出选项,则设置默认值),或在运行git commit时使用-S--gpg-sign选项。 - torek
1
@torek 你说的“麻烦而收益相对较小”是什么意思?签署您的提交可以防止其他人以您的名义推送恶意代码。这对于安全非常重要,特别是如果他与其他人在同一存储库上工作。您不应该阻止人们签署提交。 - Mickael B.
这个回答解决了你的问题吗?在签署git提交时记住GPG密码 - Mickael B.
@MickaelB:你可以只签署特定的带注释标签,而不是每次提交都签署。这就是Git发行版本身的准备方式。 - torek
4个回答

11

我按照这篇指南,成功获取了一个询问是否保存密码到钥匙链的UI对话框。 在MacOS Monterey 12.0.1上使用。

Pinentry Mac UI dialog


  1. Content of ~/.gnupg/gpg-agent.conf:
    pinentry-program /opt/homebrew/bin/pinentry-mac
    enable-ssh-support
    
  2. After that, kill all GnuPG processes (Not all of them are actually installed):
    killall gpg-agent
    killall gpg2
    killall gpg
    killall dirmngr
    
  3. Run the following test:
    echo "Test" | gpg -as
    

如上所示,Pinentry Mac 应该会显示对话框。


我遵循了这个Gist中的指南进行 GPG 设置。


3
我甚至没有安装pinentry-mac。 首先运行: brew install pinentry-mac然后我就能够按照你的指示进行了。谢谢! - Glavin001

2
现在,我已经搜索了互联网,并找到了很多关于如何在git push时记住密码的文章(我已经配置好了),以及其他各种无关的文章。
你是什么意思?你做了什么?我不确定我的答案是否有帮助,因为你可能已经做过了,但你可以更改pgp配置。在我的情况下,我也遇到了同样的问题,所以我所做的就是增加pgp允许缓存我的密码短语的最长时间。
将以下内容添加到~/.gnupg/gpg-agent.conf中:
default-cache-ttl 604800
max-cache-ttl 604800

604800 ~> 1周的秒数。


-1

你的同事可能已经勾选了将他们的GPG密钥密码存储到他们的Mac OS/OS X钥匙串中。

在输入GPG密钥密码时,你会看到一个复选框,询问你是否要将密码存储在你的钥匙串中。

要手动启用此功能,请导航至系统偏好设置应用程序,然后选择GPG Suite(或旧版本上的GPGPreferences),并勾选“存储在OS X钥匙串”选项。


如果上述方法对您无效,可能是因为您的钥匙串中存储了错误的密码。要更正此问题,请打开“钥匙串”应用程序,并搜索 gnupg - 然后编辑密码以使其正确。

如果上述两种方法都不起作用,则有可能您没有看到 GPG 密钥密码对话框,而是 SSH 私钥密码对话框 - 这也可以存储在您的钥匙串中。


13
我使用命令行中的GPG,我在哪里可以找到“存储在OS X钥匙串中”的设置? - unixb0y

-1
git config --global commit.gpgsign true

1
这个命令对我来说并没有解决这个问题。我还在寻找解决方案。 - leompeters
这个命令告诉 git 使用通过 git config user.signingkey XYZ... 设置的签名密钥自动为所有提交进行签名。这不会阻止 git 要求输入秘钥, 相反它会在每次提交时特别地要求输入秘钥 :P - Meuko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接