GPG 依赖于熵生成
GPG hangs on entropy generation
尝试生成 GPG 密钥(使用 gpg --gen-key)时,它可能会在发出消息后挂起:
没有足够的可用随机字节。请做一些其他的工作来给予
OS 有机会收集更多的熵! (还需要 278 个字节)
gpg (GnuPG) 1.4.16
Ubuntu 14.04.2 LTS
编辑:
通常不应遵循此建议,因为它不会生成安全密钥。请参阅 juacala 的回答,或 whosebug.com/questions/11708334 了解详情。
原来这是一个已知问题:
https://bugs.launchpad.net/ubuntu/+source/gnupg/+bug/706011
我通过安装 rng-tools 解决了它。
即sudo apt-get install rng-tools
然后 gpg --gen-key
按预期工作。
虽然 rng-tools 可行,但不建议这样做,因为它不提供真正的熵。请参阅此处的讨论:https://bugs.launchpad.net/ubuntu/+source/gnupg/+bug/706011
对于对此感到沮丧的用户,这里有一些我发现在没有 mouse/desktop.
的服务器上有用的东西
1) 完成创建 GPG 密钥的过程。如果它挂起等待更多的熵,转到下一步。
2) 您可以通过打开终端并输入(这将每秒查看该文件)来查看您的系统有多少熵:
watch -n1 cat /proc/sys/kernel/random/entropy_avail
3) 打开第三个终端来生成你的熵。您可以尝试各种方法来尝试增加熵。以下是我注意到的一些事情,它们增加了熵,足以使 gpg 工作。请注意,这有点随机(没有双关语意)。有时做某事会增加熵;但是当我再次这样做时,它没有:
从网上获取一个大文件
wget http://us1.php.net/get/php-7.2.2.tar.bz2/from/this/mirror
做一些向终端打印很多东西的事情:
ls -R /
sudo find /folder/with/lots/of/files/ -type f | xargs grep 'simple string that shows up in lots of files'
4) 如果你正在做的事情没有增加entropy_avail,那么试试别的。
sudo apt install haveged
这将安装 haveged
服务,该服务收集熵并更有效地填充 /dev/random
。安装 haveged
后,您不需要 运行 任何额外的命令,它会自动启动该服务。 systemctl status haveged
验证服务是 运行ning。你也可以cat /dev/random
来证明它可以持续提供价值。在我的测试中,gpg --gen-key
在 10 秒内完成并安装了 haveged
。
如果你不想安装任何东西,你可以通过其他方式生成熵,但它比 haveged
慢得多(在我的测试中慢了大约 10 倍)。 运行 这在另一个终端中,而 gpg --gen-key
是 运行ning:
while true; do
# print entropy available
cat /proc/sys/kernel/random/entropy_avail
# write a 1 MB stream of zeros to /tmp/foo
# "conv=fdatasync" flushes the disk cache
dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync
done
# one liner
while true; do cat /proc/sys/kernel/random/entropy_avail; dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync; done
尝试生成 GPG 密钥(使用 gpg --gen-key)时,它可能会在发出消息后挂起:
没有足够的可用随机字节。请做一些其他的工作来给予 OS 有机会收集更多的熵! (还需要 278 个字节)
gpg (GnuPG) 1.4.16
Ubuntu 14.04.2 LTS
编辑: 通常不应遵循此建议,因为它不会生成安全密钥。请参阅 juacala 的回答,或 whosebug.com/questions/11708334 了解详情。
原来这是一个已知问题: https://bugs.launchpad.net/ubuntu/+source/gnupg/+bug/706011
我通过安装 rng-tools 解决了它。
即sudo apt-get install rng-tools
然后 gpg --gen-key
按预期工作。
虽然 rng-tools 可行,但不建议这样做,因为它不提供真正的熵。请参阅此处的讨论:https://bugs.launchpad.net/ubuntu/+source/gnupg/+bug/706011
对于对此感到沮丧的用户,这里有一些我发现在没有 mouse/desktop.
的服务器上有用的东西1) 完成创建 GPG 密钥的过程。如果它挂起等待更多的熵,转到下一步。
2) 您可以通过打开终端并输入(这将每秒查看该文件)来查看您的系统有多少熵:
watch -n1 cat /proc/sys/kernel/random/entropy_avail
3) 打开第三个终端来生成你的熵。您可以尝试各种方法来尝试增加熵。以下是我注意到的一些事情,它们增加了熵,足以使 gpg 工作。请注意,这有点随机(没有双关语意)。有时做某事会增加熵;但是当我再次这样做时,它没有:
从网上获取一个大文件
wget http://us1.php.net/get/php-7.2.2.tar.bz2/from/this/mirror
做一些向终端打印很多东西的事情:
ls -R /
sudo find /folder/with/lots/of/files/ -type f | xargs grep 'simple string that shows up in lots of files'
4) 如果你正在做的事情没有增加entropy_avail,那么试试别的。
sudo apt install haveged
这将安装 haveged
服务,该服务收集熵并更有效地填充 /dev/random
。安装 haveged
后,您不需要 运行 任何额外的命令,它会自动启动该服务。 systemctl status haveged
验证服务是 运行ning。你也可以cat /dev/random
来证明它可以持续提供价值。在我的测试中,gpg --gen-key
在 10 秒内完成并安装了 haveged
。
如果你不想安装任何东西,你可以通过其他方式生成熵,但它比 haveged
慢得多(在我的测试中慢了大约 10 倍)。 运行 这在另一个终端中,而 gpg --gen-key
是 运行ning:
while true; do
# print entropy available
cat /proc/sys/kernel/random/entropy_avail
# write a 1 MB stream of zeros to /tmp/foo
# "conv=fdatasync" flushes the disk cache
dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync
done
# one liner
while true; do cat /proc/sys/kernel/random/entropy_avail; dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync; done