![为什么即使使用 gpg-agent,gpg 仍要求输入密码?](https://linux22.com/image/94737/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8D%B3%E4%BD%BF%E4%BD%BF%E7%94%A8%20gpg-agent%EF%BC%8Cgpg%20%E4%BB%8D%E8%A6%81%E6%B1%82%E8%BE%93%E5%85%A5%E5%AF%86%E7%A0%81%EF%BC%9F.png)
我按如下方式启动 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