¿Limpiar mi llavero gnupg?

46

Mi llavero gnupg contiene cientos de entradas innecesarias. ¿Cómo eliminaría las claves caducadas, revocadas y sin firmar?

Me gustaría conservar las claves que han firmado mi clave e importar nuevas claves solo según sea necesario. Anteriormente importé toda la red de confianza para los firmantes de mi clave. Parece que uno de mis firmantes clave ha recogido una gran cantidad de firmas en sus viajes, y ahora están obstruyendo mi llavero.

scruss
fuente
1
Yo usaría gpgtools.org . Sin embargo, no ayuda a eliminar el tiempo de expiración, pero definitivamente facilita la administración de las claves gpg
Nick Roz

Respuestas:

37

De la hoja de trucos GPG de Charles Lockhart :

Lo he usado User Namecomo el nombre asociado con la clave. Lo siento, eso no es muy imaginativo. Creo que gpg es bastante amplio en sus asignaciones de usuario, por ejemplo, el nombre de mi clave privada es "Charles Lockhart", pero puedo hacer referencia a eso simplemente poniendo "Lockhart". Eso no tiene ningún sentido, lo siento.

            ︙

para eliminar una clave pública (de su conjunto de claves públicas):

$ gpg --delete-key "User Name"

Esto elimina la clave pública de su anillo de clave pública.
NOTA: Si hay una clave privada en su conjunto de claves privadas asociada con esta clave pública, ¡obtendrá un error! Primero debe eliminar su clave privada para este par de claves de su anillo de claves privadas.

para eliminar una clave privada (una clave en su conjunto de claves privadas):

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

Esto elimina la clave secreta de su llavero secreto.

MelBurslan
fuente
2
Gracias; eso es un comienzo, al menos. Puedo usarlo para buscar y enumerar las claves caducadas:gpg --list-keys | awk '/^pub.* \[expired\: / {id=$2; sub(/^.*\//, "", id); print id}' | fmt -w 999 | sed 's/^/gpg --delete-keys /;'
scruss
"User Name"también puede ser la clave pública corta
nmz787
8

Tengo un script bash programado para ejecutarse semanalmente desde cron para manejar esto:

#!/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
fuente
¿Qué hay $2en la awksección de tu guión? Y mientras lo haces, ¿qué es $1? Aclamaciones.
Cbhihe
Sintaxis awk normal para el segundo y primer campo (separados por espacios) en la línea de entrada actual.
fche
No entiendo por qué hacer la limpieza local de claves y luego ... descargar de nuevo todas las cosas que acaba de eliminar del servidor de claves --refresh-keys. Pondría la actualización en el medio del guión, no al final.
lapo
4
% gpg --edit-key KEYID
gpg> clean
User ID [...]: 139 signatures removed
gpg> save
% gpg --version
gpg (GnuPG) 1.4.18
[...]
fche
fuente
1
Cuando sigo esos pasos y luego verifico con `gpg --list-keys` sigo viendo las mismas claves caducadas ...
Cbhihe
55
gpg cleanno elimina las claves caducadas, solo las firmas caducadas
fche
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.

Aquí hay un bash-script haciendo el trabajo. Es una adaptación de https://superuser.com/a/859739 para gpg2 donde la identificación de la clave está en la segunda línea.

Brian
fuente