我想为一个使用Ubuntu操作系统的人创建一个自动化GnuPG密钥生成脚本,这个人不喜欢使用命令行界面。此外,有其他人管理他们的电脑,保持其更新和良好运行状态,所以他们没有root / sudo访问权限。我真的很想尽可能避免通过电话指导的方式进行操作...因为这样做太麻烦了!因此,我从gnupg.org论坛上找到的示例中借鉴了很多内容编写了这个脚本。但是,无论在3或4分钟内产生多少鼠标活动,一旦运行
gpg --gen-key --batch
命令,该脚本似乎都无法执行任何操作。顺便说一下,所有的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的密钥参数上,但是我已经在man页面中进行了交叉参考,似乎找不到问题所在。不过,有趣的是gpg没有返回错误信息。
%no-ask-passphrase
。如果您没有足够的熵,请继续工作并让GnuPG在后台运行。大多数操作系统从多个来源派生熵,仅移动鼠标可能不足。做一些实际工作,以产生网络流量、硬盘旋转等活动,它很快就能收集足够的熵。无论如何:您使用的是哪个操作系统? - Jens Eratgpg --gen-key --batch
之后挂起;我正在运行Debian稳定版;我还尝试让du /
在运行脚本之前运行,这肯定会生成足够的熵,但也打开并关闭了像GIMP、Inkscape和VBox这样占用大量资源的应用程序。我将尝试添加%no-ask-passphrase
选项,看看事情是否会进一步发展。 - nanker%no-ask-passphrase
没有明显的影响。但奇怪的是,在gpg --batch --gen-key
命令后面紧跟着的%echo Generating a default key
从未回显,这可能表明gpg --batch --gen-key
命令存在问题;但在我找到的几个处理无人值守 gpg 密钥生成的网站中,该命令似乎是被使用或建议使用的。但是为什么 gpg 不会返回错误呢,除非它确实在等待某些用户输入,这将使无人值守的“批处理”选项失效。 - nanker