当 ~/.gnupg/gpg-agent.conf 存在时,为什么 GPG 会要求输入密码?

当 ~/.gnupg/gpg-agent.conf 存在时,为什么 GPG 会要求输入密码?

在 Ubuntu 20.04.3 上使用 GPG 2.2.19、libgcrypt 1.8.5

我使用 GPG 签署 git 提交,并在 Unix 密码管理器中解密密码 savec经过。一切运行正常。例如。GPP 顺利地签署了我的提交并通过 解密了我的 pwd 查询pass。GPG 从不要求输入密码。

当我使用 导出私钥进行备份时gpg --export-secret-keys --armor。我注意到 pinentry 屏幕是图形化的,它会阻止整个屏幕(实际上是两个显示器),直到我正确输入密码。不确定整个屏幕阻止是否是故意设计的。但我发现这相当不方便。四处搜索后,我了解到我只需要创建~/.gnupg/gpg-agent.conf和配置 pinentry 程序。我这样做了:

cat > ~/.gnupg/gpg-agent.conf << EOF
# The UI to prompt for passphrase. Possible values: ll /usr/bin/pinentry*
pinentry-program /usr/bin/pinentry-curses

# set the timespan (in seconds) after entering your password. Default: 7200 seconds (2 hours)
# 1 week = 604800 secs, 30days = 2592000, 1Y = = 31536000 seconds.
max-cache-ttl 604800

# sets the timeout (in seconds) after the last GPG activity. Default 600 seconds (10 minutes)
default-cache-ttl 604800
EOF

# Reload config
gpg-connect-agent reloadagent /bye

我也添加export GPG_TTY=$(tty)~/.zshrc

pinentry-curses程序确实实现了预期的效果,即在终端模式下显示 pinentry 屏幕。但是,现在每次计算机重新启动时,无论何时使用 GPG,无论是解密(通过pass实用程序)还是通过git签署提交,pinentry 屏幕都会弹出以要求输入密码。此后,密码会被缓存,pinentry 不再弹出...直到下次操作系统重新启动。

每次重启时都要求输入密码可能是一件好事。但我已经习惯了 GPG 不要求输入密码。而且我的工作设置目前允许这种松懈。当我重命名或删除文件时~/.gnupg/gpg-agent.conf,GPG 会像以前一样工作,即解密和签名而不要求输入密码。

问题~/.gnupg/gpg-agent.conf:当文件存在时,GPG 每次重新启动操作系统时都会“忘记”密码,原因是什么?

答案1

gpg-agent 本身没有“持久”密码存储。它总是重启后忘记密码,必须第一次调用 pinentry。

然而,所有标准图形 pinentries 都有自己的集成秘密持久密码存储 – 这意味着他们会将密码存储在 GNOME Keyring 中。每当 gpg-agent 在重启后运行全屏“pinentry-gnome3”时,pinentry 应用程序都会直接从 GNOME Keyring 返回密码,而无需实际提示任何内容。

同时,文本模式 pinentry 应用程序(pinentry-curses、pinentry-tty)没有 libsecret 集成,因为它们旨在用于 GNOME Keyring 之类的东西无法生存的环境中。

要再次获得此功能,您需要切换到pinentry-gtk-2pinentry-qt


附注:我怀疑 GnuPG 选择调用 GNOME Shell 提供的全屏提示器是经过深思熟虑的,因为即使GNOME 3,简单的gtk-2pinentry 已经有一个选项可以全局抓取所有输入事件,而不管焦点是什么;这是为了防止用户意外地将密码输入到错误的窗口中。(我认为这是最近才改为离开默认情况下。)

相关内容