我在 ubuntu 12.04 上使用 gpg-agent 2.0.17 和 gpg 1.4.11,并使用 Thunderbird 的 Enigmail 插件。打开加密电子邮件时,Enigmail 会使用关联的 pinentry 程序调用 gpg-agent 并要求输入密码。然后我可以选择设置缓存密码的有效期,通常设置为会话结束时。
由于我很少关闭或注销会话,因此我想强制 gpg-agent 在锁定会话时忘记所有缓存的密码。我搜索了一种方法,gpg-agent 的手册页指出,-SIGHUP 将刷新所有密码 - 然而,与手册页相反,缓存的密码不会被忘记。
关于如何强制 gpg-agent 忘记密码有什么想法吗?
答案1
gpg-agent
缓存密码的 TTL 由的选项控制:
--default-cache-ttl n
Set the time a cache entry is valid to n seconds. The default is 600 seconds.
--max-cache-ttl n
Set the maximum time a cache entry is valid to n seconds. After
this time a cache entry will be expired even if it has been accessed
recently. The default is 2 hours (7200 seconds).
按照按需控制的方式,如果你能够在锁定屏幕时触发命令,则使用钥匙链处理gpg-agent
可以用来执行
keychain --clear --agents gpg
这将终止所有 gpg-agent 托管实例。但是,您应该有一种方法可以keychain --agents gpg --eval $gpg
在解锁屏幕时执行。也许太麻烦了。
答案2
gpgconf --reload gpg-agent
是强制代理忘记缓存在内存中的密码的一种方法。目前(gpg 2.0-2.1)这 [几乎] 相当于pkill -HUP gpg-agent
。我说“几乎等同”是因为理论上你可以运行多个代理,而 pkill 会尝试向所有代理发送 SIGHUP。
答案3
我使用一个简单的:
echo RELOADAGENT | gpg-connect-agent
发挥魅力。
--
已编辑:已使用、、Debian 10
进行测试gpg 2.2.12
libgcrypt 1.8.4
答案4
这是对我有用的清除单个密码(即密码)的方法 - 从终端运行 - 如果你想清除所有密码https://superuser.com/a/1269901/457084作品:
gpg-connect-agent "clear_passphrase --mode=normal <cacheid>" /bye
<cacheid>
如果您执行以下命令,最有可能出现可用的键盘把手 位置是gpg --list-keys --with-keygrip
:
<path to pubring.kbx>
------------------------------------------------
pub rsa2048 2017-12-11 [SC] [expires: 2019-12-11]
<keyid>
Keygrip = <keygrip>
uid `<email>