GnuPG pinentary 取决于 GUI 存在

GnuPG pinentary 取决于 GUI 存在

在 MacOSX 上,我使用gnupg21进行签名git commit。根据我目前正在进行的项目,有时我使用 IDE(此处IntellijIDEA)进行交互git,有时直接在 中进行交互terminal

我必须设置

pinentry-program /usr/local/bin/pinentry-mac

能够继续工作IntellijIDEA

但是我不太喜欢使用时出现 GUI terminal。您认为可以根据情况配置gnupg21选择程序吗?pinentry

  • 在 GUI 上 ->/usr/local/bin/pinentry-mac
  • 在终端上 ->/usr/local/bin/pinentry

编辑:我当前的配置文件

gpg-代理配置文件

enable-ssh-support
default-cache-ttl 14400
max-cache-ttl 86400
log-file /var/log/gpg-agent.log
pinentry-program /usr/local/bin/pinentry-mac

gpg配置文件

keyserver hkp://keys.gnupg.net
no-tty
use-agent

答案1

运行gpg-agent多个

在 GnuPG 2.1 之前, GnuPGgpg-agent可以配置为使用不同的套接字;您可以使用gpg-agent不同配置(pinentry 实现)并行运行的不同 s。

在 GnuPG 2.1 中,这种情况不再可能。自 2.1 版起,GnuPG 始终使用固定套接字路径。

Pinentry 切换

启用此功能的唯一明确可能性可能是编写一个 pinentry“开关”实现,根据从命令行还是 GUI 调用来决定调用哪个实际的 pinentry(例如,取决于设置了什么DISPLAY或变量)。tty

环回密码输入模式

另一种方法是使用 loopback pinentry 功能,gpg-agent出于安全原因,默认情况下禁用此功能。Pinentry loopback 将gpg-agent查询gpg密码短语,而不是带外 pinentry 密码查询。这可能会引发安全问题,因为相当大且复杂的 GnuPG 应用程序(存在漏洞的可能性更大)可以访问密码短语,从而访问私钥,否则这将仅限于和gpg-agentpinentry 实现。

无论如何,要这样做,请allow-loopback-pinentry在 中添加一行~/.gnupg/gpg-agent.confkillall gpg-agent这样下次 GnuPG 想要使用它时,它将重新启动并启用该选项)。当您想要使用 GUI pinentry 时,请正常启动 GnuPG;对于命令行操作,请gpg21 --pinentry-mode loopback改为调用(当然,这可以是 的别名gpg21)。

答案2

抱歉回答迟了,但是我有同样的问题,并且找到了一个比pinentry-program每次更改配置并重新启动 gpg-agent 更简洁的解决方案。

虽然它没有在源代码之外的任何地方记录,但如果环境变量设置为,pinentry-mac则会回退到 curses CLI pin 输入方法。您可以在 gpg-agent.conf 中将 pinentry-mac 保留为默认值,然后轻拍:PINENTRY_USER_DATAUSE_CURSES=1

export PINENTRY_USER_DATA="USE_CURSES=1"

在你的 bash 配置文件或同等配置文件中。

相关内容