我今天才知道如何在我的 Mac 上使用 gpg-agent。在遇到与您相同的错误后,我被阻止了:
gpg: problem with the agent - disabling agent use
tldr;我是如何解决的
对于我的设置,我可以通过安装 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 之后)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
在这个练习中,我尝试了很多不同的选项,发现pinentry-mac GUI 提示器“正常工作”。
避免使用 GUI 密码提示器
如果您不希望弹出 GUI 提示器,那么我认为确保在每个终端中设置以下环境变量就足够了:
-
GPG_TTY
- 例如,您可以将此行放入 .bashrc:
export GPG_TTY=$(tty)
GPG_AGENT_INFO