在 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-agent
pinentry 实现。
无论如何,要这样做,请allow-loopback-pinentry
在 中添加一行~/.gnupg/gpg-agent.conf
(killall 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_DATA
USE_CURSES=1
export PINENTRY_USER_DATA="USE_CURSES=1"
在你的 bash 配置文件或同等配置文件中。