【发布时间】:2014-05-21 21:47:20
【问题描述】:
我想为一个 atm 人创建一个自动 GnuPG 密钥生成脚本,尽管他们运行 ubuntu,但对使用 CLI 感到不舒服。此外,其他人管理他们的计算机,使其保持最新并处于良好的运行状态,因此他们也没有 root/sudo 访问权限。而且我真的很想尽量避免通过电话进行指示......去过那里太多次了,不知道这可能是什么 PITA!
因此,我大量借鉴了我在 gnupg.org 论坛上找到的一个示例(我认为?)来编写这个脚本。但是,一旦运行gpg --gen-key --batch 命令,无论在 3 或 4 分钟内产生多少鼠标活动,它似乎都不会做任何事情。顺便说一句,所有 echo 语句只是指示脚本进度的临时手段,这不是很远。
#!/bin/bash
# First run give your server some work, otherwise gpg won't be able to generator random bytes.
#sudo rngd -r /dev/urandom
#no sudo so:
echo -e "\nYou need to begin moving your mouse continuously and in random patterns for as long as it takes to generate a new key. This could take a minute or two, so be patient and just keep moving the mouse.\n"
echo -e "\ngpg --gen-key --batch\n"
gpg --batch --gen-key
%echo Generating a default key
Key-Type: default
Key-Length: 2048
Subkey-Type: default
Name-Real: Firstname Lastname
Name-Comment: No comment
Name-Email: user@domain.com
Expire-Date: 0
Passphrase: abcde
%pubring foo.pub
%secring foo.sec
# Do a commit here, so that we can later print "done" :-)
%commit
%echo done
# kill the rngd task.
#sudo service rng-tools stop
echo -e "\ngpg -k\n"
gpg -k
# get key id for newly created passkey
echo -e "\nkId=$(gpg -k Firstname|grep pub|sed -r 's/^pub[ ]*2048R\/([A-Z0-9]{8,})[ ]*.*$/\1/')\n" #; echo "\$kId: ${kId}"
kId=$(gpg -k Firstname|grep pub|sed -r 's/^pub[ ]*2048R\/([A-Z0-9]{8,})[ ]*.*$/\1/') ; echo -e "\n\$kId: ${kId}\n"
# set key as the default key (if desired) by entering this line in your ~/.bashrc
echo -e "\nexport GPGKEY=$kId\n"
export GPGKEY="$kId"
# restart the gpg-agent and source your .bashrc again
echo -e "\nkillall -q gpg-agent\n"
killall -q gpg-agent
eval $(gpg-agent --daemon)
source ~/.bashrc
#create revocation cert
echo -e "\ngpg --output revoke.asc --gen-revoke $GPGKEY\n"
gpg --output revoke.asc --gen-revoke $GPGKEY
# send public key to keyserver
echo -e "\ngpg --send-keys --keyserver keyserver.ubuntu.com $GPGKEY\n"
#gpg --send-keys --keyserver keyserver.ubuntu.com $GPGKEY
我想知道是否有人可以看到提供“gpg”所需关键细节的任何明显问题或遗漏?
即使我使用 sudo rngd -r /dev/random 命令运行脚本,我也会得到相同的结果,而我需要绕过目标用户(无 sudo 访问权限)。
所以我猜问题出在我想传递给 gpg 的关键参数中,但我已经在手册页中交叉引用了它们,似乎找不到问题所在。有趣的是,gpg 没有返回错误。
【问题讨论】:
-
GnuPG 或您的脚本卡在哪里?您可能需要使用
%no-ask-passphrase。如果你没有足够的熵,就继续工作,让 GnuPG 在后台运行。大多数操作系统从多个来源获取熵,仅仅移动鼠标可能是不够的。做一些实际的工作,这样就有网络流量,硬盘在旋转,...,它很快就能收集到足够的熵。无论如何:您使用的是什么操作系统? -
@Jens:抱歉,
gpg --gen-key --batch回显并运行后脚本挂起;我正在运行 Debian 稳定版;我还尝试在运行脚本之前让du /运行,这肯定会产生足够多的熵,但也会打开和关闭诸如 gimp、inkscape 和 vbox 之类的应用程序,这些应用程序会占用大量资源。我会尝试按照您的建议添加%no-ask-passphrase选项,看看事情是否进一步发展。 -
@Jens 是的,
%no-ask-passphrase没有明显的影响。奇怪的是,紧跟在gpg --batch --gen-key命令之后的%echo Generating a default key从不回显,这可能表明gpg --batch --gen-key命令有问题;但在我发现处理无人值守 gpg 密钥生成的少数站点中,该命令似乎是使用或建议的命令。但是为什么 gpg 不返回错误,除非它确实在等待一些用户输入,这会破坏无人值守的“批处理”选项 -
很可能发现了问题,您的脚本无法像现在这样运行。 GnuPG 等待它从未收到的输入,因为之后的命令应该是这个输入。
-
请注意,使用 'sudo rngd -r /dev/random' 会导致密钥不安全,所以不要将它用于您关心的任何事情!