git - gpg 到 mac osx:错误:gpg 无法签署数据

问题描述 投票:0回答:9

我从 brew 安装了 GPG。

brew install gpg

是gnupg2-2.0.30_2.

当我提交时,我确实收到一条错误消息:

You need a passphrase to unlock the secret key for
user: "Max Mustermann (mycomment) <[email protected]>"
2048-bit RSA key, ID 1111AAAA, created 2017-01-05 

error: gpg failed to sign the data
fatal: failed to write commit object

我使用了命令:

gpg --list-secret-keys | grep ^sec

它还给我:

sec   2048R/1111AAAA 2017-01-05

然后我使用了这个命令:

git config --global user.signingkey 1111AAAA

commit 给我返回相同的错误消息。

我该如何解决这个问题?

git macos gnupg
9个回答
130
投票

如果你根本没有收到输入密码的提示,解决方案可能只是安装一个程序来促进这一点。最常见的是pinentry.

brew install pinentry-mac

所以安装它并再次尝试may让事情正常进行。但如果没有,另一件事就是确保

git
使用/找到正确的 GPG 程序。这些天你真的应该使用
gpg2
,所以如果你还没有安装它,请执行以下操作:

gpg --version

…并确保它表明您安装了 GnuPG 版本 2+(不是版本 1)。

如果你已经安装了 GnuPG 2+ 和

pinentry
,那么试试这个:

echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf

……或者,更稳健:

echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf

……然后再试一次。

你可能还需要停下来

gpg-agent

gpgconf --kill gpg-agent

您不需要手动重启它——它会在需要时自动重启。

注意: 一些评论者提到在进行更改后需要重新启动——但似乎唯一的影响可能是导致

gpg-agent
重新启动。因此,如上所述手动杀死
gpg-agent
应该就足够了。


83
投票

任何在 MacOS 机器上遇到这个问题的人,试试这个:

  1. brew uninstall gpg
  2. brew install gpg2
  3. brew install pinentry-mac
    (如果需要)
  4. gpg --full-generate-key
    使用算法创建密钥。
  5. 通过执行获取生成的密钥:
    gpg --list-keys
  6. 在这里设置密钥
    git config --global user.signingkey <Key from your list>
  7. git config --global gpg.program /usr/local/bin/gpg
  8. git config --global commit.gpgsign true
  9. 如果您想将密钥导出到 GitHub,则:
    gpg --armor --export <key>
    并将此密钥添加到 GPG 密钥的 GitHub:https://github.com/settings/keys(包括 START 和 END 行)

如果问题依然存在:

test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile

echo 'export GPG_TTY=$(tty)' >> ~/.profile

如果问题依然存在:

安装https://gpgtools.org并通过按菜单栏中的Sign来签署您使用的密钥:Key-> Sign

如果问题依然存在:

转到: 你的全球

.gitconfig
文件,在我的例子中是:
/Users/gent/.gitconfig
并修改.gitconfig文件(请确保Email和Name与您在生成Key时创建的相同)

[user]
    email = [email protected]
    name = Gent
    signingkey = <YOURKEY>
[gpg]
    program = /usr/local/bin/gpg
[commit]
    gpsign = true
    gpgsign = true
[filter "lfs"]
    process = git-lfs filter-process
    required = true
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
[credential]
    helper = osxkeychain

p.s 我从我之前的回答中得到了这个答案: gpg 无法对数据进行致命签名:无法写入提交对象 [Git 2.10.0]


7
投票

我有同样的错误信息,发现我的密钥已经过期了。 因此,使用以下方法检查密钥过期可能是个好主意:

gpg --list-keys

如果您的密钥也已过期,您可以通过以下方式调整到期日期:

gpg --edit-key <YOUR_KEY>

然后:

gpg> expire
...enter the new expiration date...
gpg> save

1
投票

我在 macOS 上运行

brew upgrade
,它破坏了我在 git 中的 gpg 签名,大概是在它更新 gpg 包的时候。我假设有一种更简单的方法可以强制 gpg 服务正确重启(我假设升级包时正在运行的东西坏了),但我对此的修复非常简单:只需重启你的计算机。


0
投票

改为安装 GPGSuite,它具有用于生成密钥的 GUI。

你可以看到更多的细节here


0
投票

如果您在 macOS 中仍然遇到问题, 打开

~/.gitconfig
并将
[gpg]
以下的任何内容更改为
program = /usr/local/bin/gpg


0
投票

在我的例子中,user.signingkey 设置错误....复制正确的签名密钥问题解决了


0
投票

如果您在安装 Xcode 后发生这种情况,则您的 git 二进制文件可能已被替换。 (此特定解决方案假设您正在使用自制软件管理 git 安装。)

症状:

  1. 系统不会提示您输入密码
  2. 你的错误信息是
    error: gpg failed to sign the data
    fatal: failed to write commit object
    
  3. $ git config --global gpg.program
    抛出错误
  4. 你会看到一个系统 git 而不是 homebrew 安装的:
    $ which git
    /usr/bin/git # should be /usr/local/bin/git with homebrew
    $ ls -l $(which git)
    -rwxr-xr-x  1 root  wheel  167072 Feb  6  2022 /usr/bin/git
    # should be a symbolic link with homebrew:
    # lrwxr-xr-x  1 user  admin  28 Aug 16 12:11 /usr/local/bin/git -> ../Cellar/git/2.37.2/bin/git
    $ git --version
    git version 2.32.1 (Apple Git-133)
    

在这种情况下,解决方案是使用自制软件安装或重新安装 git。

$ brew install git
# <output>
# then restart your terminal
$ ls -l $(which git)
lrwxr-xr-x  1 user  admin  28 Aug 16 12:11 /usr/local/bin/git -> ../Cellar/git/2.37.2/bin/git
$ git --version
git version 2.37.2

别忘了重启终端。


0
投票

为了解决这个问题而无需在每次重启时杀死

gpg-agent

检查您是否有

gpg
gpg-agent
的多个副本:

$ which -a gpg-agent
/opt/homebrew/bin/gpg-agent
/usr/local/MacGPG2/bin/gpg-agent

$ which -a gpg
/opt/homebrew/bin/gpg
/usr/local/bin/gpg
/usr/local/bin/gpg

对我来说,

MacGPG2
安装了一些来自旧 Macbook 迁移的剩余二进制文件。

删除那些二进制文件(和符号链接)并再次检查以确保只有一个副本:

$ which -a gpg
/opt/homebrew/bin/gpg

$ which -a gpg-agent
/opt/homebrew/bin/gpg-agent

然后最后一次重新启动计算机。

gpg
应该正确签名而不需要杀死任何东西:

$ echo "test" | gpg --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

test
-----BEGIN PGP SIGNATURE-----
Comment: GPGTools - https://gpgtools.org

iQIzBAEBCgAdFiEE1S8n.....
-----END PGP SIGNATURE-----
© www.soinside.com 2019 - 2024. All rights reserved.