当签名密钥存储在钥匙卡上时,是否有任何方法可以使用 GPG 签署多个文件? (或者更具体地说,就我而言,是 Yubikey)。
目前,我有一个脚本,可以循环遍历我想要签名的多个文件,例如:
for pkg in html/packages/*.tar;
do
gpg2 --detach-sign --armor -o $pkg.sig $pkg
done
这是可行的,但由于我的钥匙卡上有一个密码,系统会提示我为每个文件输入我的密码,这在几个文件之后就变得非常烦人。
有没有办法一次性签署所有文件?或者,签名过程是否有一些解决方法,以便可以在调用之间缓存 pin 码?
答案1
如果您可以将 PIN 放入脚本可以使用的变量中,您可以执行以下操作:
for pkg in html/packages/*.tar;
do
echo ${PIN} | gpg --batch --yes --passphrase-fd 0 --detach-sign --armor -o $pkg.sig $pkg
done
从man
页面:
--passphrase-fd n
Read the passphrase from file descriptor n. Only the first line will be read
from file descriptor n. If you use 0 for n, the passphrase will be read from
STDIN. This can only be used if only one passphrase is supplied.
Note that since Version 2.0 this passphrase is only used if the option --batch
has also been given. Since Version 2.1 the --pinentry-mode also needs to be set
to loopback.
有关passphrase-fd
(在哪里gpg
应从何处接收密码短语)选项的https://stackoverflow.com/questions/19895122/how-to-use-gnupgs-passphrase-fd-argument可能有帮助