使用gpg-preset-passphrase在2.1.15中缓存通过pinentry输入的密码短语需要采取什么步骤?


8

我正在尝试缓存密码短语以在无人照管的计算机上使用。由于这样做会带来一定的风险,因此,我宁愿选择要缓存的密码短语,并避免同时设置两者default-cache-ttlmax-cache-ttl令人讨厌的高值,以及避免需要gpg-agent定期清除整个缓存-因此,我正在寻找使用的解决方案gpg-preset-passphrase。我在进行故障排除时发现的某些信息是指旧版本的GnuPG,因此我不确定我是否已充分考虑了所有差异。

首先,按照规定man 1 gpg-agent,我export GPG_TTY=$(tty)在我的.bashrc中。

现在假设我eval $(gpg-agent --daemon --allow-preset-passphrase --default-cache-ttl 1 --max-cache-ttl 31536000)开始启动gpg-agent,注意gpg-preset-passphrase仍然使用--max-cache-ttl(默认2小时)。

然后,我用获取$KEYGRIP所需的秘密子密钥的密钥gpg --with-keygrip -K

有了这个我尝试/path/to/gpg-preset-passphrase -c $KEYGRIP。在返回时,将打印:

   gpg-preset-passphrase: caching passphrase failed: Not implemented

尝试再次添加--verbose --debug 6 --log-file /path/to/gpg-agent.loggpg-agent,我的日志附加了

   gpg-agent[4206] listening on socket /run/user/1000/gnupg/S.gpg-agent
   gpg-agent[4207] gpg-agent (GnuPG) 2.1.15 started
   gpg-agent[4207] handler 0x7f86ef783700 for fd 5 started
   gpg-agent[4207] command PRESET_PASSPHRASE failed: Not implemented
   gpg-agent[4207] handler 0x7f86ef783700 for fd 5 terminated

除了进一步深入了解源代码之外,我不确定从何处着手,因此我想知道是否有人可以首先更正我正在采取的步骤。


你有解决过这个吗?
AlMehdi

我有一点确定将密码短语发送到stdin gpg-preset-passphrase,我的第一个具体线索是来自此邮件列表list.gnupg.org/pipermail/gnupg-users/2010-January/037876.html
ThorSummoner

如何从标准输入发送,而不是回显?这听起来根本不安全
霍姆斯(Holms)

Answers:



0

听起来您想将密码发送给gpg-preset-passphraseover stdin,而不回显它(以避免在进程列表中公开它):

/path/to/gpg-preset-passphrase -c $KEYGRIP <<< $PASSPHRASE

如果您关心bash之外的可移植性:

/path/to/gpg-preset-passphrase -c $KEYGRIP <<EOF
$PASSPHRASE
EOF

关于“此处文档”语法(EOF)的答案对我而言非常宝贵:https//unix.stackexchange.com/a/88492

您还需要allow-preset-passphrase~/.gnupg/gpg-agent.conf由霍尔姆斯提及。

如果您想使用对称加密(因为我已经对此失去了理智,也许您不必这样做),请在此处查看我的答案,找到正确的keygrip / cacheid以用于在gpg-中预设密码代理:https//superuser.com/a/1485486/1093343

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.