Ich habe in https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html#Unattended-GPG-key-generation eine Methode gefunden, um GPG-Schlüssel ohne Benutzerinteraktion zu generieren, aber dies ist nicht der Fall scheinen zu funktionieren.
Mein Drehbuch lautet:
#!/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
Wenn ich es starte, zeigt es:
=$ ./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'
Aber dann hängt es einfach.
Wenn ich in der Zwischenzeit den ps-Baum für diesen Benutzer überprüfe, sehe ich:
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
In ~ / .gnupg / gpg.conf wird Agent nicht erwähnt, und ich habe keine Ahnung, was er versucht zu tun.
Die Dateien foo.pub/foo.sec werden im Ausgangsverzeichnis erstellt, sind jedoch leer.
Was vermisse ich? Wie wird der Schlüssel ohne Benutzerinteraktion generiert?
Versionen:
- gpg (GnuPG) 2.0.26
- libgcrypt 1.6.2
/dev/random
(und daher/dev/urandom
fast immer hochgradig unvorhersehbare Zahlen ), da ich ein Hardwaregerät habe, das Quantentunneling verwendet, um Entropie zu erzeugen, die physisch mit meinem Server verbunden ist (siehe über).Ich habe festgestellt, dass es ein paar einfache Änderungen gibt, mit denen Ihr Skript funktioniert. Ich habe auch ein paar Tests beigefügt, damit der erstellte Schlüssel automatisch getestet wird.
Ich habe auch das Passwort entfernt, damit die Schlüsseltests automatisiert werden können.
quelle
Dies wurde im Rahmen der Erstellung von Schlüsseln für eine automatisierte Anwendungsinstallation herausgearbeitet. Das Installieren und Starten des ' rngd' -Pakets zur Erzeugung von entroy behebt Ihr Problem. Einfach zu installieren und zu benutzen.
Hier ist der Code .
/dev/hwrandom
standardmäßig, aber änderbar), um eine Entropiequelle bereitzustellenquelle
urandom
als Quelle verwendet, von der abgeraten wird. 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
wird standardmäßig verwendet und kann geändert werden . Siehe Manpage.urandom
und dass dies nicht empfohlen wird.Hier ist eine, die Sie verwenden könnten, aber ich würde empfehlen, dieses Skript in einem neuen Terminal auszuführen, um Ihre aktuelle nicht zu beeinträchtigen. Dieses Skript erzeugt weiterhin Entropie, indem es den Computer beschäftigt und in einer Endlosschleife bleibt, bis ein Benutzer das Skript beendet. Erst nach der Schlüsselgenerierung ist eine Benutzerinteraktion erforderlich. Das Skript listet nur Dateien für immer auf.
Abhängig von Ihrem Computer und der Größe des Schlüssels kann es einige Minuten (manchmal mehr als 10) dauern, bis die Generierung abgeschlossen ist.
quelle