Encontrei no método https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html#Unattended-GPG-key-generation para gerar chaves gpg sem interação do usuário, mas isso não acontece parece funcionar.
Meu script é:
#!/usr/bin/env bash
rm -rf .gnupg
mkdir -m 0700 .gnupg
touch .gnupg/gpg.conf
chmod 600 .gnupg/gpg.conf
tail -n +4 /usr/share/gnupg2/gpg-conf.skel > .gnupg/gpg.conf
touch .gnupg/{pub,sec}ring.gpg
cat >.gnupg/foo <<EOF
%echo Generating a basic OpenPGP key
Key-Type: RSA
Key-Length: 2048
Subkey-Type: RSA
Subkey-Length: 2048
Name-Real: User 1
Name-Comment: User 1
Name-Email: [email protected]
Expire-Date: 0
Passphrase: kljfhslfjkhsaljkhsdflgjkhsd
%pubring foo.pub
%secring foo.sec
# Do a commit here, so that we can later print "done" :-)
%commit
%echo done
EOF
gpg2 --verbose --batch --gen-key .gnupg/foo
Quando eu o executo, ele mostra:
=$ ./gen.keys.sh
gpg: Generating a basic OpenPGP key
gpg: no running gpg-agent - starting one
gpg: writing public key to `foo.pub'
gpg: writing secret key to `foo.sec'
Mas então isso simplesmente trava.
Quando eu verifico, nesse meio tempo, a árvore ps para esse usuário, vejo:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
tstpg 22603 0.0 0.0 24108 5688 pts/9 Ss 14:59 0:00 -bash
tstpg 22624 0.0 0.0 13688 3168 pts/9 S+ 14:59 0:00 \_ bash ./gen.keys.sh
tstpg 22632 0.2 0.0 27428 3676 pts/9 SL+ 14:59 0:00 \_ gpg2 --verbose --batch --gen-key .gnupg/foo
tstpg 22634 0.3 0.0 18072 2884 pts/9 SL+ 14:59 0:00 \_ gpg-agent --server
No ~ / .gnupg / gpg.conf não há menção sobre o agente, e eu não tenho ideia do que ele está tentando fazer.
Os arquivos foo.pub/foo.sec são gerados no diretório home, mas estão vazios.
o que estou perdendo? Como gerar a chave sem nenhum tipo de interação do usuário?
Versões:
- gpg (GnuPG) 2.0.26
- libgcrypt 1.6.2
/dev/random
(e, portanto, números altamente imprevisíveis de/dev/urandom
quase todo o tempo), porque eu tenho um dispositivo de hardware que usa o tunelamento quântico para gerar entropia fisicamente conectada ao meu servidor (consulte acima).Descobri que existem algumas mudanças simples que fazem seu script funcionar. Também incluí alguns testes para que, uma vez criada a chave, ela seja automaticamente testada.
Também removi a senha para que os principais testes possam ser automatizados.
fonte
Resolvido isso como parte da geração de chaves para uma instalação automatizada de aplicativos. Instalar e iniciar o pacote ' rngd ' para gerar entroy corrigirá o seu problema. Simples de instalar e usar.
Aqui está o código .
/dev/hwrandom
por padrão, mas modificável) para fornecer uma fonte de entropiafonte
urandom
é usado como fonte, o que é desencorajado. wiki.archlinux.org/index.php/Rng-toolsWarning: Some tutorials available in the Internet, and even early versions of rng-tools package, recommend the following line for systems without TRGN: RNGD_OPTS="-o /dev/random -r /dev/urandom" Of course, this is a really bad idea, since you are simple filling the kernel entropy pool with entropy coming from the kernel itself! If your system does not have an available TRGN consider using haveged instead. See FS#34580 for details.
/dev/hwrandom
por padrão e é modificável. Veja a página de manual.urandom
e que isso é desencorajado.Aqui está um que você poderia usar, mas eu recomendaria executar este script em um novo terminal para não afetar o atual. Esse script continuará gerando entropia mantendo a máquina ocupada e presa em um loop infinito até que um usuário saia do script. Nenhuma interação do usuário é necessária até após a geração da chave. Tudo o que o script faz é listar arquivos para sempre.
Pode levar alguns minutos (às vezes 10 ou mais) para gerar, dependendo da sua máquina e tamanho da chave, mas é bom não ter que interagir com ela.
fonte