Znalazłem w https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html#Unattended-GPG-key-generation generowanie kluczy gpg bez interakcji użytkownika, ale nie wydaje się działać.
Mój skrypt to:
#!/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
Po uruchomieniu wyświetla:
=$ ./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'
Ale potem się zawiesza.
Kiedy w międzyczasie sprawdzam drzewo ps dla tego użytkownika, widzę:
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
W ~ / .gnupg / gpg.conf nie ma wzmianki o agencie i nie mam pojęcia, co on próbuje zrobić.
Pliki foo.pub/foo.sec są generowane w katalogu głównym, ale są puste.
czego mi brakuje? Jak wygenerować klucz bez jakiejkolwiek interakcji użytkownika?
Wersje:
- gpg (GnuPG) 2.0.26
- libgcrypt 1.6.2
/dev/random
(a zatem bardzo nieprzewidywalnych liczb od/dev/urandom
prawie cały czas), ponieważ mam urządzenie sprzętowe, które wykorzystuje tunelowanie kwantowe do generowania entropii fizycznie podłączonej do mojego serwera (patrz powyżej).Odkryłem, że istnieje kilka prostych zmian, które sprawiają, że skrypt działa. Dodałem także kilka testów, aby po utworzeniu klucza został on automatycznie przetestowany.
Usunąłem również hasło, aby testy kluczy mogły zostać zautomatyzowane.
źródło
Opracowano to w ramach generowania kluczy do automatycznej instalacji aplikacji. Zainstalowanie i uruchomienie pakietu „ rngd ” w celu wygenerowania entroy naprawi problem. Prosty w instalacji i obsłudze.
Oto kod .
/dev/hwrandom
domyślnie, ale można go modyfikować), aby zapewnić źródło entropiiźródło
urandom
jest używany jako źródło, które jest odradzane. 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
domyślnie i można go modyfikować. Zobacz stronę podręcznika man.urandom
i że jest to odradzane.Oto jeden, którego możesz użyć, ale zaleciłbym uruchomienie tego skryptu w nowym terminalu, aby nie wpłynął na twój obecny. Ten skrypt będzie nadal generował entropię, utrzymując maszynę w stanie zajętości i zatrzymując się w nieskończonej pętli, dopóki użytkownik nie wyjdzie ze skryptu. Interakcja użytkownika nie jest konieczna do momentu wygenerowania klucza. Wszystko, co robi skrypt, to lista plików na zawsze.
Wygenerowanie może zająć kilka minut (czasem 10+) w zależności od komputera i wielkości klucza, ale dobrze jest nie musieć z nim współdziałać.
źródło