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

db2dz4w8  于 2023-02-20  发布在  Git
关注(0)|答案(9)|浏览(174)

我从brew安装了GPG。

brew install gpg

它是gnupg 2 -2.0.30_2。
当我提交时,我得到一条错误消息:

You need a passphrase to unlock the secret key for
user: "Max Mustermann (mycomment) <mm@test.de>"
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返回了相同的错误消息。
我怎样才能解决这个问题?

xxb16uws

xxb16uws1#

如果你根本没有收到输入密码的提示,解决方案可能就是安装一个程序来帮助你输入密码,最常见的是pinentry

brew install pinentry-mac

所以安装后再试一次也许能让它正常工作。但是如果不能,另一件要做的事情是确保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应该足够了。

ezykj2lf

ezykj2lf2#

对于在MacOS计算机上遇到此问题的任何人,请尝试以下操作:

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

如果问题仍然存在:

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

如果问题仍然存在:

安装https://gpgtools.org,然后按菜单栏中的Sign对您使用的密钥进行签名:-〉符号

如果问题仍然存在:

转到:您的全局.gitconfig文件,在我的情况下是:并修改**.gitconfig**文件 (请确保电子邮件和名称与您在生成密钥时创建的文件相同)

[user]
    email = gent@youremail.com
    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]
xienkqul

xienkqul3#

我收到了同样的错误消息,并发现我的密钥已过期。因此,使用以下命令检查密钥过期可能是个好主意:
gpg --list-keys
如果您的密钥也已过期,您可以使用以下命令调整过期日期:
gpg --edit-key <YOUR_KEY>
然后:

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

moiiocjp4#

我在macOS上运行brew upgrade,它破坏了我在git中的gpg登录,大概是在它更新gpg包的时候。我想有一个更简单的方法可以强制gpg服务正确重启(我想当我升级包的时候,某个正在运行的东西坏了),但我的修复方法很简单:重新启动计算机即可。

ycggw6v2

ycggw6v25#

改为安装GPGSuite,它具有用于生成密钥的GUI。
您可以查看更多详细信息here

py49o6xq

py49o6xq6#

如果您在macOS中仍然遇到问题,请打开~/.gitconfig并将[gpg]以下的任何内容更改为program = /usr/local/bin/gpg

t9aqgxwy

t9aqgxwy7#

在我的情况下,用户。signingkey设置错误....复制正确的signingkey,问题解决

evrscar2

evrscar28#

如果在安装Xcode之后发生这种情况,那么git二进制文件可能已经被替换了(这个解决方案假设你使用homebrew来管理git安装)。
症状:
1.系统不会提示您输入密码
1.您的错误消息是

error: gpg failed to sign the data
fatal: failed to write commit object
  1. $ git config --global gpg.program引发错误
    1.你会看到一个系统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与homebrew。

$ 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

别忘了重新启动终端。

8aqjt8rx

8aqjt8rx9#

要解决此问题而不在每次重新启动时终止gpg-agent,请执行以下操作:
检查是否有gpggpg-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-----

相关问题