GnuPG pinentry 取决于 GUI 的存在

Kak*_*ait 3 gnupg macos

在 MacOSX 上,我正在使用gnupg21以签署git commit. 根据项目目前我正在某个时候我使用IDE(这里IntellijIDEA)进行交互git和某个直接terminal

我必须设置

pinentry-program /usr/local/bin/pinentry-mac
Run Code Online (Sandbox Code Playgroud)

能够继续工作IntellijIDEA

但是,当我使用terminal. 您认为可以根据情况配置gnupg21选择pinentry程序吗?

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

编辑:我当前的配置文件

gpg-agent.conf

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
Run Code Online (Sandbox Code Playgroud)

配置文件

keyserver hkp://keys.gnupg.net
no-tty
use-agent
Run Code Online (Sandbox Code Playgroud)

小智 6

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

尽管在源之外的任何地方都没有记录,但pinentry-mac如果PINENTRY_USER_DATA环境变量设置为USE_CURSES=1. 您可以将 pinentry-mac 保留为 gpg-agent.conf 中的默认值并拍打:

export PINENTRY_USER_DATA="USE_CURSES=1"
Run Code Online (Sandbox Code Playgroud)

在您的 bash 配置文件或等效文件中。


Jen*_*rat 4

运行gpg-agent多个

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

对于 GnuPG 2.1,这不再可能了。自 2.1 起,GnuPG 始终使用固定的套接字路径。

松树切换

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

环回 Pinentry 模式

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

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