Pulisci il mio portachiavi gnupg?


46

Il mio portachiavi gnupg contiene centinaia di voci non necessarie. Come rimuoverei le chiavi scadute, revocate e non firmate da esso?

Vorrei conservare le chiavi che hanno firmato la mia chiave e importare le nuove chiavi solo come richiesto. In precedenza avevo importato l'intera rete di fiducia per i firmatari della mia chiave. Sembrerebbe che uno dei miei firmatari chiave abbia raccolto un numero molto elevato di firme nei suoi viaggi e questi ora stanno ostruendo il mio portachiavi.


1
Vorrei usare gpgtools.org . Tuttavia, non aiuta a rimuovere scaduti, ma facilita decisamente la gestione delle chiavi gpg
Nick Roz,

Risposte:


37

Dal cheat sheet GPG di Charles Lockhart :

Ho usato User Namecome il nome associato alla chiave. Mi dispiace che non sia molto fantasioso. Penso che gpg sia piuttosto ampio nelle assegnazioni degli utenti, ad esempio, il nome della mia chiave privata è "Charles Lockhart", ma posso fare riferimento a questo semplicemente inserendo "Lockhart". Non ha alcun senso, scusa.

            ︙

per eliminare una chiave pubblica (dal tuo portachiavi pubblico):

$ gpg --delete-key "User Name"

Questo rimuove la chiave pubblica dal tuo portachiavi pubblico.
NOTA: se sul proprio anello di chiavi private è presente una chiave privata associata a questa chiave pubblica, verrà visualizzato un errore! Devi prima eliminare la tua chiave privata per questa coppia di chiavi dal tuo portachiavi privato.

per eliminare una chiave privata (una chiave sul tuo portachiavi privato):

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

Questo elimina la chiave segreta dal tuo portachiavi segreto.


2
Grazie; è un inizio, almeno. Posso usarlo per trovare ed elencare le chiavi scadute:gpg --list-keys | awk '/^pub.* \[expired\: / {id=$2; sub(/^.*\//, "", id); print id}' | fmt -w 999 | sed 's/^/gpg --delete-keys /;'
scruss

"User Name"può anche essere la chiave pubblica breve
nmz787,

8

Ho uno script bash programmato per essere eseguito settimanalmente da cron per gestire questo:

#!/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

Cosa c'è $2nella awksezione della tua sceneggiatura? E mentre ci siamo, che cos'è $1? Saluti.
Cbhihe,

Sintassi awk normale per il secondo e il primo campo (separati da spazio) nella riga di input corrente.
fche

Non capisco perché eseguire la pulizia locale delle chiavi e quindi ... scaricare di nuovo tutte le cose che hai appena eliminato dal keyserver --refresh-keys. Metterei l'aggiornamento nel mezzo della sceneggiatura, non la fine.
lapo,

4
% gpg --edit-key KEYID
gpg> clean
User ID [...]: 139 signatures removed
gpg> save
% gpg --version
gpg (GnuPG) 1.4.18
[...]

1
Quando seguo questi passaggi e poi controllo con `gpg --list-keys` continuo a vedere le stesse vecchie chiavi scadute ...
Cbhihe,

5
gpg cleannon rimuove le chiavi scadute, solo le firme scadute
fche l'

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.

ecco uno script bash che fa il lavoro. È un adattamento di https://superuser.com/a/859739 per gpg2 dove l'ID chiave si trova nella seconda riga.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.