我确实使用 git 签署提交,但一个大问题是我无法从除 CLI 之外的任何地方输入 gpg 密钥密码。例如,如果我在 vscode 中提交,它将失败。所以我想出了一个想法,只需从 CLI 输入密码,并将其缓存一段时间。
我在这里使用鱼壳,所以这是一个配置:
set -x GPG_TTY (tty)
eval (gpg-agent --daemon --allow-preset-passphrase --default-cache-ttl 43200)
据我了解,我需要启用为代理预设密码。那么接下来怎么办?
我尝试过像这样预设一个键,但失败了:
$ echo mypassphrase | /usr/lib/gnupg2/gpg-preset-passphrase -c E2AB66331DA5CA780B7B1FA5D4BF11DA1E39EDFF
gpg-preset-passphrase: caching passphrase failed: Not supported
我已经用谷歌搜索了一切,但没有人在任何地方回答这个问题。如果有像
ssh-add
这样的东西就好了,你只需添加一个私钥,然后输入密码,想知道为什么 gpg-agent 没有采用这个好的设计。
看来已经解决了。需要添加几件事到
~/.gnupg/gpg-agent.conf
:
default-cache-ttl 46000
pinentry-program /usr/bin/pinentry-gtk-2
allow-preset-passphrase
重新加载 gpg-agent
gpg-connect-agent reloadagent /bye
为了将来的参考,在我的 Ubuntu 发行版中,我安装了
pinentry
(在 /usr/bin/
内),这样我就可以这样使用它
在
~/.gnupg/gpg-agent.conf:
pinentry-program /usr/bin/pinentry
另一种选择是
pinentry-tty
,您可以使用 brew
或 apt
安装它
pinentry-program /home/linuxbrew/.linuxbrew/bin/pinentry-tty
两者都要求在终端中输入密码,但
pinentry
有一个看起来像网络中的模式的TUI,而pinentry-tty
直接要求密码作为命令的输出,就像使用sudo
一样。