Wie lösche ich geheime GPG-Schlüssel mit Gewalt ohne Fingerabdruck?

11

Durch einen Unfall wurde ein Großteil der geheimen Schlüssel (ohne öffentlichen Schlüssel) im GPG-Schlüsselring generiert, und ich habe ein Skript zum Löschen dieser Schlüssel geschrieben, aber GPG erlaubt mir dies nicht:

$ gpg --batch --yes --delete-secret-keys KEYS
gpg: can't do this in batch mod
gpg: (unless you specify the key by fingerprint)

Nun, ich weiß, was ich tue, und ich weiß, dass möglicherweise doppelte Schlüssel-IDs vorhanden sind, aber es scheint keine Möglichkeit zu geben, das Löschen zu erzwingen, obwohl auch Folgendes nicht funktioniert:

$ yes | gpg --delete-secret-keys KEYS

Irgendeine Idee?

Xiè Jìléi
quelle

Antworten:

6

Verwenden Sie gpg --list-secret-keys --with-colons --fingerprintdiese Option, um die Liste der Fingerabdrücke in einem leicht analysierbaren Format zu erstellen. Nehmen Sie die Zeilen des Formulars , die den Tasten entsprechen, die Sie löschen möchten, und übergeben Sie die Fingerabdrücke an .fpr:::::::::xxxx:xxxxgpg --batch --delete-secret-keys

Der folgende Befehl generiert alle Fingerabdrücke des geheimen Schlüssels. Stellen Sie sicher, dass Sie nur diejenigen auswählen, die Sie löschen möchten!

gpg --list-secret-keys --with-colons --fingerprint | sed -n 's/^fpr:::::::::\([[:alnum:]]\+\):/\1/p'
Gilles 'SO - hör auf böse zu sein'
quelle
Groß! Ich dachte, der Fingerabdruck ist nur in öffentlichen Schlüsseln verfügbar.
Xiè Jìléi
Hoppla! Ich liege falsch, der Fingerabdruck konnte nicht abgerufen werden, der Befehl lautet: gpg: Schlüssel XXXXXXXX: geheimer Schlüssel ohne öffentlichen Schlüssel - übersprungen gpg: Fehler beim Lesen des Schlüssels: geheimer Schlüssel nicht verfügbar Tatsächlich frage ich mich nur, warum ` ja | ... 'funktioniert nicht und ich denke der einzige Weg ist ein Patch auf GPG. Danke
Xiè Jìléi
3

Ich weiß, dass dieses Thema alt ist und dass die Antwort irgendwie wie die von Gilles aussieht, aber ich denke, sie beantwortet die Frage vollständig (da ich die gleichen Probleme wie OP hatte):

for i in `gpg --with-colons --fingerprint | grep "^fpr" | cut -d: -f10`; do gpg --batch --delete-secret-keys "$i" ; done
Dolanor
quelle
2

Ich habe die Antworten von Gilles und Dolanor in diesem einen Liner zusammengefasst, der nützlich ist, wenn Sie einen bestimmten Schlüssel löschen möchten:

gpg --fingerprint --with-colons ${GPG_KEY} |\
    grep "^fpr" |\
    sed -n 's/^fpr:::::::::\([[:alnum:]]\+\):/\1/p' |\
    xargs gpg --batch --delete-secret-keys

Die ursprüngliche Frage wird nicht beantwortet, kann aber für andere nützlich sein.

Nikolaos Georgiou
quelle
1

Exportieren Sie die Schlüssel, die Sie behalten möchten, löschen Sie die Datei und erstellen Sie Ihren Ring neu.

Aaron Digulla
quelle
Ich würde es vorziehen, gpg zu patchen und neu zu kompilieren.
Xiè Jìléi