通过 bash 自动签署并信任 gpg 密钥

通过 bash 自动签署并信任 gpg 密钥

我有一个关于 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。这是可能的,但我还没有实现。基本思想是:

  1. gpg-agent从替换的配置开始pinentry
  2. 使用pinentry从 FIFO 读取必要数据的替换(因为脚本是由 启动的gpg-agent)。
  3. 启动后台进程,将必要的数据写入 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然后才能自动运行它。到目前为止,我还没有尝试保存,但希望一切顺利。

相关内容