我有一个关于 gpg 和通过 bash 自动签名密钥的问题:我有一个脚本,正在开始签名:
gpg --recv $schluessel1
gpg --edit $schluessel1
如果我尝试这样的事情:
lsign
它被忽略,只显示下面的输出。
gpg>
根据上面的提示,我可以手动写入lsign
,稍后再y
写入。
是否可以自动执行这两个步骤?
答案1
我编写了一个执行类似操作的脚本(德语,但这似乎不是问题:http://www.openpgp-schulungen.de/scripte/key Generation/key- Generation.sh):
echo addkey$'\n'8$'\n'e$'\n'q$'\n'${length}$'\n'"$expire"$'\n'save$'\n' |
LC_ALL= LANGUAGE=en gpg --batch --display-charset utf-8 --utf8-strings \
--passphrase "$PASSPHRASE" --command-fd 0 --edit-key $x_short_id
这适用于 GnuPG 1.4.x 和 2.0.x。
在 1.4.x 中,lsign
应该可以以类似的方式轻松进行操作。对于 2.0.x,您还必须关心gpg-agent
。这是可能的,但我还没有实现。基本思想是:
gpg-agent
从替换的配置开始pinentry
。- 使用
pinentry
从 FIFO 读取必要数据的替换(因为脚本是由 启动的gpg-agent
)。 - 启动后台进程,将必要的数据写入 FIFO。
代码示例:
echo "OK - what's up?"
while read cmd rest; do
# echo "cmd=$cmd rest=$rest" >&2
: ${PINENTRY_USER_DATA}
case "$cmd" in
\#*)
:
;;
GETINFO)
if [ "pid" = "$rest" ]; then
echo "D $$"
fi
echo "OK"
;;
GETPIN)
read PASSPHRASE <"$input_fifo_path"
echo "D ${PASSPHRASE}"
echo "OK"
;;
BYE)
echo "OK"
exit 0
;;
*)
echo "OK"
;;
esac
done
答案2
我刚刚找到了正确答案:
gpg --recv $key # receive Key from Keyserver
xdotool key y; xdotool key Return # press y and then return
gpg --edit $key lsign save # Sign and save the key
首先我必须安装 xdotoolsudo apt-get install xdotool
然后才能自动运行它。到目前为止,我还没有尝试保存,但希望一切顺利。