Meinen Gnupg-Schlüsselbund aufräumen?

46

Mein Gnupg-Schlüsselbund enthält Hunderte von unnötigen Einträgen. Wie entferne ich die abgelaufenen, widerrufenen und nicht signierten Schlüssel?

Ich möchte die Schlüssel, die meinen Schlüssel signiert haben, behalten und nur bei Bedarf neue Schlüssel importieren. Zuvor hatte ich das gesamte Vertrauensnetz für die Unterzeichner meines Schlüssels importiert. Es scheint, dass einer meiner Schlüsselunterzeichner auf seinen Reisen sehr viele Unterschriften gesammelt hat, die meinen Schlüsselbund verstopfen.

scruss
quelle
1
Ich würde gpgtools.org verwenden . Es hilft nicht, abgelaufene zu entfernen, aber auf jeden Fall erleichtert die Verwaltung von GPG-Schlüsseln
Nick Roz

Antworten:

37

Aus Charles Lockharts GPG-Spickzettel :

Ich habe User Nameals den mit dem Schlüssel verbundenen Namen verwendet. Sorry, das ist nicht sehr einfallsreich. Ich denke, gpg ist in seinen Benutzerzuweisungen ziemlich umfangreich, z. B. lautet der Name meines privaten Schlüssels "Charles Lockhart", aber ich kann darauf verweisen, indem ich nur "Lockhart" eingebe. Das ergibt keinen Sinn, sorry.

            ︙

So löschen Sie einen öffentlichen Schlüssel (aus Ihrem öffentlichen Schlüsselbund):

$ gpg --delete-key "User Name"

Dadurch wird der öffentliche Schlüssel aus Ihrem öffentlichen Schlüsselbund entfernt.
HINWEIS: Wenn sich in Ihrem privaten Schlüsselbund ein privater Schlüssel befindet, der diesem öffentlichen Schlüssel zugeordnet ist, wird eine Fehlermeldung angezeigt! Sie müssen zuerst Ihren privaten Schlüssel für dieses Schlüsselpaar aus Ihrem privaten Schlüsselbund löschen.

So löschen Sie einen privaten Schlüssel (einen Schlüssel auf Ihrem privaten Schlüsselbund):

$ gpg --delete-secret-key "User Name"

Dadurch wird der geheime Schlüssel aus Ihrem geheimen Schlüsselbund gelöscht.

MelBurslan
quelle
2
Vielen Dank; Das ist zumindest ein Anfang. Ich kann es benutzen, um die abgelaufenen Schlüssel zu finden und gpg --list-keys | awk '/^pub.* \[expired\: / {id=$2; sub(/^.*\//, "", id); print id}' | fmt -w 999 | sed 's/^/gpg --delete-keys /;'
aufzulisten
"User Name"kann auch der kurze öffentliche Schlüssel sein
nmz787
8

Ich habe ein Bash-Skript geplant, das wöchentlich von cron ausgeführt wird, um dies zu handhaben:

#!/bin/bash
# Clean up the GPG Keyring.  Keep it tidy.
# blog.lavall.ee

echo -n "Expired Keys: "
for expiredKey in $(gpg2 --list-keys | awk '/^pub.* \[expired\: / {id=$2; sub(/^.*\//, "", id); print id}' | fmt -w 999 ); do
    echo -n "$expiredKey"
    gpg2 --batch --quiet --delete-keys $expiredKey >/dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo -n "(OK), "
    else
        echo -n "(FAIL), "
    fi
done
echo done.

echo -n "Update Keys: "
for keyid in $(gpg -k | grep ^pub | grep -v expired: | grep -v revoked: | cut -d/ -f2 | cut -d' ' -f1); do
    echo -n "$keyid"
    gpg2 --batch --quiet --edit-key "$keyid" check clean cross-certify save quit > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo -n "(OK), "
    else
        echo -n "(FAIL), "
    fi
done
echo done.

gpg2 --batch --quiet --refresh-keys > /dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "Refresh OK"
else
     echo "Refresh FAIL."
fi
Warren Lavallee
quelle
Was ist $2in dem awkAbschnitt Ihres Skripts? Und was ist dabei $1? Prost.
Cbhihe
Normale awk-Syntax für das zweite und erste (durch Leerzeichen getrennte) Feld in der aktuellen Eingabezeile.
Fche
Ich verstehe nicht, warum man die Schlüssel lokal bereinigt und dann… all das herunterlädt, was Sie gerade mit wieder vom Keyserver gelöscht haben --refresh-keys. Ich würde die Aktualisierung in die Mitte des Skripts stellen, nicht in das Ende.
Lapo
4
% gpg --edit-key KEYID
gpg> clean
User ID [...]: 139 signatures removed
gpg> save
% gpg --version
gpg (GnuPG) 1.4.18
[...]
fche
quelle
1
Wenn ich diesen Schritten folge und dann mit `gpg --list-keys` nachschaue, sehe ich immer dieselben alten abgelaufenen Schlüssel ...
Cbhihe
5
gpg cleanentfernt keine abgelaufenen Schlüssel, nur abgelaufene Unterschriften
siehe
0
echo -n "Expired Keys: "
list_expired_keys="$(gpg2 --list-keys | grep -1 pub | sed 'N;s/\n/ /' | awk '/^pub.* \[expired\: / {id=$7; sub(/^.*\//, "", id); print id}' | fmt -w 999)";
list_revoked_keys="$(gpg2 --list-keys | grep -1 pub | sed 'N;s/\n/ /' | awk '/^pub.* \[revoked\: / {id=$7; sub(/^.*\//, "", id); print id}' | fmt -w 999)";
for key in $list_expired_keys $list_revoked_keys; do
    echo -n "$key"
    gpg2 --batch --quiet --delete-keys $key >/dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo -n "(OK), "
    else
        echo -n "(FAIL), "
    fi
done
echo done.

Hier ist ein Bash-Skript, das den Job erledigt. Es ist eine Anpassung von https://superuser.com/a/859739 für gpg2, wobei sich die Schlüssel-ID in der zweiten Zeile befindet.

Brian
quelle