为什么即使使用 gpg-agent,gpg 仍要求输入密码?

为什么即使使用 gpg-agent,gpg 仍要求输入密码?

我按如下方式启动 gpg-agent:

eval `gpg-agent --daemon --preset`

并在此终端窗口中,按照建议使用 gpg-preset-passphrase 命令:

echo secretpassword | /usr/libexec/gpg-preset-passphrase --preset KEYGRIPID

然后我用了这个答案验证密码确实已正确缓存:

echo 'GET_PASSPHRASE --no-ask KEYGRIPID Err Pmt Des'|gpg-connect-agent |
  perl -pe 's/([0-9a-fA-F]{2})/chr(hex $1)/eg'

当我现在运行 gpg 来签名或加密某些内容时,系统会提示我输入密码。这不应该发生。

gpg -u KEYGRIPID --clearsign --batch somefile.txt

<curses-based prompt>

一旦我正确输入密码并重新运行 gpg-sign 命令,我就不会收到提示。这表明密码已被缓存,尽管有所不同。

GPG版本2.0.14

答案1

这不是键盘但是指纹的关键。这是参考。这是一个丑陋的 Perl 脚本,可以帮助您提取所需的值:

gpg -K --fingerprint | 
perl -lne '$/="\n\n"' \
 -e if ( ($len,$grip,$fp)=/^sec\s+(\w+)\/([0-9A-Z]+).* fingerprint = (.*?)\s+uid\s/ms)' \
 -e { $fp =~ s/\s*//g; print "$grip $fp";}'

输出:

EF2141BE 24C5202D6905CB0A5C94AB36134E3618EF6141B8
1BA3D65B 484EE4F3DC2595FAF91F51A9731342954BAFD753

复制第二列并将其传递到预设命令中

echo secretpassword | /usr/libexec/gpg-preset-passphrase --preset 

相关内容