GitHub recently announced verified commits,所以我借此机会实施GPG并开始使用密钥。当我想开始提交时,我得到以下内容:
$ git commit
You need a passphrase to unlock the secret key for
user: "John Doe <johndoe@email.com>"
4096-bit RSA key, ID ABCD1234, created 2016-04-08
gpg: problem with the agent - disabling agent use
error: gpg failed to sign the data
fatal: failed to write commit object
我上网搜索了一个解决方案,一个网站(针对邮件提供商)建议killall gpg-agent
,并且它有效。现在,我可以输入我的密码来签署提交。
gpg-agent
是否必要?当我安装它时似乎带有GPG,但是如果我必须杀死它以签署我的提交,那么似乎我有一些我不理解的东西。我该如何解决这个问题,以便我可以gpg-agent
运行并能够签署我的提交?
答案 0 :(得分:19)
我今天刚刚想出如何在我的Mac上使用gpg-agent
。在遇到与您相同的错误后我被阻止了:
gpg: problem with the agent - disabling agent use
对于我的设置,我可以通过安装pinentry-mac
并指向gpg-agent
来使用它来解决此问题,从而根据需要弹出GUI提示符。
1. install pinentry-mac
% brew install pinentry-mac
2. update gpg-agent conf
# manually change ~/.gnupg/gpg-agent.conf's pinentry-program to /usr/local/bin/pinentry-mac
3. update shell's view of PATH contents
% hash -r
4. restart gpg-agent
# however you normally do it (see below for how I run it manually)
我通过手动重启gpg-agent
来调试此操作。我首先评论了~/.gnupg/gpg-agent.conf
中的配置,然后运行此命令以--verbose
重新启动gpg-agent:
% killall gpg-agent && \
eval $(gpg-agent --pinentry-program /usr/local/bin/pinentry --default-cache-ttl 60 --daemon --verbose)
然后我运行了一个测试命令,看到了我们上面列出的错误,以及一个新错误:
# update the MY_GPG_KEY_ID as appropriate
% echo hi | gpg -e -r $(MY_GPG_KEY_ID) | gpg -d --use-agent
...
gpg-agent[60604]: command get_passphrase failed: Device not configured
gpg: problem with the agent - disabling agent use
...
我最终意识到(在阅读this article和this GPG page之后) }。所以,一旦我设置了变量,一切都“起作用”: 在本练习中,我尝试了很多不同的选项,并发现 如果您不想弹出GUI提示符,那么我认为确保在每个终端中设置以下env变量就足够了:GPG_TTY
gpg-agent
% killall gpg-agent && \
eval $(gpg-agent --pinentry-program /usr/local/bin/pinentry --default-cache-ttl 60 --daemon --verbose)
% export GPG_TTY=`tty`
# Now the below command succeeds
% echo hi | gpg -e -r $(MY_GPG_KEY_ID) | gpg -d --use-agent
GUI提示符“刚刚起作用”。避免使用GUI密码短语提示符
pinentry-mac
GPG_TTY
export GPG_TTY=$(tty)