shell – 如何在没有用户交互的情况下生成gpg密钥?

前端之家收集整理的这篇文章主要介绍了shell – 如何在没有用户交互的情况下生成gpg密钥?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我发现在 https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html#Unattended-GPG-key-generation方法生成gpg密钥而没有用户交互,但它似乎不起作用.

我的脚本是:

  1. #!/usr/bin/env bash
  2. rm -rf .gnupg
  3. mkdir -m 0700 .gnupg
  4. touch .gnupg/gpg.conf
  5. chmod 600 .gnupg/gpg.conf
  6. tail -n +4 /usr/share/gnupg2/gpg-conf.skel > .gnupg/gpg.conf
  7.  
  8. touch .gnupg/{pub,sec}ring.gpg
  9.  
  10.  
  11. cat >.gnupg/foo <<EOF
  12. %echo Generating a basic OpenPGP key
  13. Key-Type: RSA
  14. Key-Length: 2048
  15. Subkey-Type: RSA
  16. Subkey-Length: 2048
  17. Name-Real: User 1
  18. Name-Comment: User 1
  19. Name-Email: user@1.com
  20. Expire-Date: 0
  21. Passphrase: kljfhslfjkhsaljkhsdflgjkhsd
  22. %pubring foo.pub
  23. %secring foo.sec
  24. # Do a commit here,so that we can later print "done" :-)
  25. %commit
  26. %echo done
  27. EOF
  28.  
  29. gpg2 --verbose --batch --gen-key .gnupg/foo

当我运行它时,它显示

  1. =$./gen.keys.sh
  2. gpg: Generating a basic OpenPGP key
  3. gpg: no running gpg-agent - starting one
  4. gpg: writing public key to `foo.pub'
  5. gpg: writing secret key to `foo.sec'

但它只是挂起.

当我同时检查该用户的ps树时,我看到:

  1. USER PID %cpu %MEM VSZ RSS TTY STAT START TIME COMMAND
  2. tstpg 22603 0.0 0.0 24108 5688 pts/9 Ss 14:59 0:00 -bash
  3. tstpg 22624 0.0 0.0 13688 3168 pts/9 S+ 14:59 0:00 \_ bash ./gen.keys.sh
  4. tstpg 22632 0.2 0.0 27428 3676 pts/9 SL+ 14:59 0:00 \_ gpg2 --verbose --batch --gen-key .gnupg/foo
  5. tstpg 22634 0.3 0.0 18072 2884 pts/9 SL+ 14:59 0:00 \_ gpg-agent --server

在〜/ .gnupg / gpg.conf中没有提到代理,我不知道它正在尝试做什么.

foo.pub/foo.sec文件在home dir中生成,但是为空.

我错过了什么?如何在没有任何用户交互的情况下生成密钥?

版本:

> gpg(GnuPG)2.0.26
> libgcrypt 1.6.2

你可能已经没有熵了.密钥生成需要大量非常高质量的随机数;如果没有用户的活动来向计算机提供高质量的随机性,则熵池正在被生成耗尽,并且生成过程只是挂起,等待池重新填充.

你的选择,为了提高满意度,是

>重新配置gpg以使用非阻塞伪随机生成器,这是最不明智的(尽管见下文),
>使用软件解决方案从现有系统状态中获取更多熵(众所周知,核心准备从系统状态中获取多少熵,特别是在该状态没有直接人工输入的情况下,例如cpu或NIC时序);正如你所指出的,haveged是一个这样的解决方案,或者
>为计算机提供另一种高级熵的物理来源.像Entropy Keythe OneRNG这样的设备可以满足这个要求(除了我拥有一个熵密钥之外,我与这两个产品都没有关系,我对它非常满意).

编辑:mzhaase在this article on /dev/urandom vs. /dev/random评论中引起了我的注意(非常感谢,这是一篇很棒的文章!)并且我不喜欢使用urandom来创建密钥.事实上,文章并没有说这两个来源是等价的,并指出

Linux’s /dev/urandom happily gives you not-so-random numbers before
the kernel even had the chance to gather entropy. When is that? At
system start,booting the computer.

也就是说,在启动之后,直到urandom PRNG已经用足够的熵初始化,将它用于密钥生成真的是不安全的.这可能需要一段时间,尤其是在无人值守的无头服务器上,我们不知道何时达到阈值,因为系统没有明确告诉我们.

现在,如果/ dev / random准备发出数字,我可以合理推断熵池足够深,以至于urandom将被正确初始化.但是如果我必须在每次使用urandom之前检查/ dev / random阻塞(假设我生成密钥的次数少于我重启的情况,很可能就是这种情况)我不妨只使用/ dev / random中的数字生成我的密钥.

猜你在找的Bash相关文章