Я нашел в https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html#Unattended-GPG-key-generation метод генерации ключей gpg без взаимодействия с пользователем, но это не так похоже на работу.
Мой сценарий:
#!/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: user@1.com
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
Когда я запускаю его, он показывает:
=$ ./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'
Но тогда это просто зависает.
Когда я проверяю ps-дерево для этого пользователя, я вижу:
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
В ~ / .gnupg / gpg.conf нет упоминания об агенте, и я понятия не имею, что он пытается сделать.
Файлы foo.pub/foo.sec создаются в домашнем каталоге, но они пусты.
Что мне не хватает? Как создать ключ без какого-либо взаимодействия с пользователем?
Версии:
- gpg (GnuPG) 2.0.26
- libgcrypt 1.6.2
/dev/random
(и, следовательно,/dev/urandom
почти непредсказуемые числа почти всегда), потому что у меня есть аппаратное устройство, которое использует квантовое туннелирование для генерации энтропии, физически подключенной к моему серверу (см. над).Я обнаружил, что есть несколько простых изменений, которые заставят ваш скрипт работать. Я также включил несколько тестов, чтобы после создания ключа он автоматически тестировался.
Я также удалил пароль, чтобы ключевые тесты можно было автоматизировать.
источник
Это было сделано как часть генерации ключей для автоматической установки приложения. Установка и запуск пакета ' rngd ' для генерации entroy решит вашу проблему. Прост в установке и использовании.
Вот код .
/dev/hwrandom
по умолчанию, но изменяемый), чтобы обеспечить источник энтропииисточник
urandom
используется в качестве источника, что не рекомендуется. 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
по умолчанию и может быть изменено. Смотрите справочную страницу.urandom
и это не рекомендуется.Вот тот, который вы могли бы использовать, но я бы порекомендовал запустить этот скрипт в новом терминале, чтобы он не влиял на ваш текущий. Этот сценарий будет продолжать генерировать энтропию, оставляя машину занятой и зацикливаясь на бесконечном цикле, пока пользователь не выйдет из сценария. Взаимодействие с пользователем не требуется до генерации ключа. Все, что делает скрипт - это список файлов навсегда.
Генерирование может занять несколько минут (иногда более 10) в зависимости от вашей машины и размера ключа, но хорошо, что вам не нужно с ним взаимодействовать.
источник