为了(稍微)提高安全性,我希望根据正在执行的任务更好地控制任何解锁密钥的生命周期。理想情况下,我会启动一个交互式子 shell,执行任何涉及机密的任务,然后在子 shell 退出时自动清除所有未锁定的密钥。
我知道可以使用手动清除缓存的密码短语gpg-connect-agent
,但据我所知,需要明确指定每个键。另一种选择是使用--default-cache-ttl
或--max-cache-ttl
选项设置排序缓存到期时间gpg-agent
;但通常这意味着要么设置较长的 TTL,要么多次要求输入相同的密码。
我似乎记得很久以前可以指定一个替代gpg-agent
套接字路径并基本上启动一个独立的会话,但这似乎不再可能了;较新的版本似乎使用无法更改的固定路径。
那么,我错过了什么?有办法实现我想要的吗?
答案1
虽然我没有完整的解决方案,但我确实找到了解决方法:
--homedir
通过参数或环境变量使用 GnuPG 的备用主目录GNUPGHOME
,可以强制 GnuPG 使用一组不同的密钥存储文件和关联的代理套接字路径。考虑到这一点,我可以在新会话中启动 shell gpg-agent
:
gpg-agent \
--homedir /my/other/keys \
--default-cache-ttl 86400 \
--max-cache-ttl 86400 \
--daemon \
\
/bin/bash
如果指定的 TTL 通过(本例中为一天),任何输入的密码都将过期,或者在新 shell 退出时被“忘记”,因为这将导致父gpg-agent
实例自行终止。
我不认为这是一个完整的解决方案的原因是它强制使用单独的密钥环。然而,这非常适合我的特定用例,因此,我没有进一步调查。
如果在维护不同实例之间的任何锁定方面足够小心,则可以通过具有默认 GnuPG 密钥环的符号链接来实现同一密钥环的独立会话的全部效果gpg-agent
。我将把它作为练习留给读者......