【问题标题】:Unattended GPG command script hangs at GPG command无人值守的 GPG 命令脚本在 GPG 命令处挂起
【发布时间】: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' 会导致密钥不安全,所以不要将它用于您关心的任何事情!

标签: bash gnupg


【解决方案1】:

通过批量密钥生成,GnuPG 期望文件中的创建命令,与GnuPG manual page on batch key generation 比较。

cat <<EOT >batch-cmds
%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
EOT
gpg --batch --gen-key batch-cmds

考虑将密码存储在硬盘上的文件中的安全隐患。我不确定您是否也可以将内容直接通过管道传输到 GnuPG 而不是将它们存储到文件中。试试这样的:

gpg --batch --gen-key <<EOT
%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
EOT

【讨论】:

  • 带有参数的单独文件有效。无法让参数内联工作。
  • 这也没有在文档中描述,但 GnuPG 似乎在等待什么。显然不适用于批量密钥生成输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多