Limpar meu chaveiro gnupg?


46

Meu chaveiro gnupg contém centenas de entradas desnecessárias. Como removeria as chaves expiradas, revogadas e não assinadas?

Gostaria de manter as chaves que assinaram minha chave e importar novas chaves apenas conforme necessário. Eu já havia importado toda a rede de confiança dos signatários das minhas chaves. Parece que um dos meus principais assinantes pegou um número muito grande de assinaturas em suas viagens, e agora elas estão entupindo meu chaveiro.


1
Eu usaria gpgtools.org . Não ajuda para remover expirado, embora, mas definitivamente facilita o gerenciamento de chaves GPG
Nick Roz

Respostas:


37

Da folha de dicas GPG de Charles Lockhart :

Eu usei User Namecomo sendo o nome associado à chave. Desculpe, isso não é muito imaginativo. Eu acho que o gpg é bastante amplo em suas atribuições de usuário, por exemplo, o nome da minha chave privada é "Charles Lockhart", mas posso referir isso apenas inserindo "Lockhart". Isso não faz sentido, desculpe.

            ︙

para excluir uma chave pública (do seu conjunto de chaves públicas):

$ gpg --delete-key "User Name"

Isso remove a chave pública do seu conjunto de chaves públicas.
NOTA: Se houver uma chave privada no seu conjunto de chaves privadas associada a essa chave pública, você receberá um erro! Você deve excluir sua chave privada desse par de chaves do seu conjunto de chaves privadas primeiro.

para excluir uma chave privada (uma chave no seu conjunto de chaves privadas):

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

Isso exclui a chave secreta do seu conjunto de chaves secretas.


2
Obrigado; isso é um começo, pelo menos. Posso usá-lo para encontrar e listar as chaves expiradas:gpg --list-keys | awk '/^pub.* \[expired\: / {id=$2; sub(/^.*\//, "", id); print id}' | fmt -w 999 | sed 's/^/gpg --delete-keys /;'
scruss

"User Name"também pode ser a chave pública curto
nmz787

8

Eu tenho um script bash agendado para ser executado semanalmente a partir do cron para lidar com isso:

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

O que está $2na awkseção do seu script? E enquanto isso, o que é $1? Felicidades.
precisa saber é o seguinte

Sintaxe awk normal para o segundo e o primeiro campo (separado por espaço) na linha de entrada atual.
fche

Eu não entendo por que fazer a limpeza local das chaves e depois ... baixar todas as coisas que você acabou de excluir do servidor de chaves novamente --refresh-keys. Eu colocaria a atualização no meio do script, não no final.
lapo

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

1
Quando eu seguir essas etapas e, em seguida, verifique com `gpg --list-keys` Eu continuo seing as mesmas chaves expiradas velhos ...
Cbhihe

5
gpg cleannão remove chaves expiradas, apenas assinaturas expiradas
fche 11/07/19

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.

aqui está um script bash fazendo o trabalho. É uma adaptação de https://superuser.com/a/859739 para gpg2 em que o ID da chave está na segunda linha.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.