Como excluir chaves secretas do gpg pela força, sem impressão digital?

11

Foi acidentalmente gerado uma grande quantidade de chaves secretas (sem chave pública) no conjunto de chaves GPG, e eu escrevi um script para excluir essas chaves, mas o GPG não me permite fazer isso:

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

bem, eu sei o que estou fazendo e sei que pode haver IDs de chave duplicados, mas parece que não há como forçar a exclusão deles, embora o seguinte não funcione também:

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

Qualquer ideia?

Xiè Jìléi
fonte

Respostas:

6

Use gpg --list-secret-keys --with-colons --fingerprintpara gerar a lista de impressões digitais em um formato facilmente analisável. Pegue as linhas do formulário que correspondem às teclas que você deseja excluir e passe as impressões digitais (a ) para .fpr:::::::::xxxx:xxxxgpg --batch --delete-secret-keys

O comando a seguir gera todas as impressões digitais das chaves secretas. Certifique-se de selecionar apenas os que você deseja excluir!

gpg --list-secret-keys --with-colons --fingerprint | sed -n 's/^fpr:::::::::\([[:alnum:]]\+\):/\1/p'
Gilles 'SO- parar de ser mau'
fonte
Ótimo! Eu pensei que a impressão digital está disponível apenas em chaves públicas.
Xiè Jìléi 11/08/10
Opa! Estou errado, a impressão digital não pôde ser obtida, o comando yeilds: gpg: key XXXXXXXX: chave secreta sem chave pública - gpg ignorado: erro na leitura da chave: chave secreta não disponível De fato, eu estou apenas me perguntando por que ` sim ... 'não funciona, e acho que o único caminho é o patch no gpg. Obrigado
Xiè Jìléi
3

Eu sei que esse tópico é antigo e que a resposta parece com a de Gilles, mas acho que responde totalmente à pergunta (já que eu tive o mesmo tipo de problemas que o OP):

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

Combinei as respostas de Gilles e Dolanor nesse liner que é útil caso você queira excluir uma chave específica:

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

Não responder à pergunta original, mas pode ser útil para outra pessoa.

Nikolaos Georgiou
fonte
1

Exporte as chaves que deseja manter, exclua o arquivo e recrie seu anel.

Aaron Digulla
fonte
Prefiro corrigir e recompilar o gpg.
Xiè Jìléi