¿Cómo eliminar claves secretas gpg por la fuerza, sin huella digital?

11

Su accidente generó una gran cantidad de claves secretas (sin clave pública) en el llavero GPG, y he escrito un script para eliminar esas claves, pero GPG no me permite hacer eso:

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

bueno, sé lo que estoy haciendo y sé que puede haber una clave duplicada (s), pero parece que no hay forma de forzar su eliminación, aunque lo siguiente tampoco funciona:

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

¿Alguna idea?

Xiè Jìléi
fuente

Respuestas:

6

Utilícelo gpg --list-secret-keys --with-colons --fingerprintpara generar la lista de huellas digitales en un formato fácilmente analizable. Tome las líneas del formulario que corresponden a las teclas que desea eliminar y pase las huellas digitales (a ) .fpr:::::::::xxxx:xxxxgpg --batch --delete-secret-keys

El siguiente comando genera todas las huellas digitales de claves secretas. ¡Asegúrese de seleccionar solo los que desea eliminar!

gpg --list-secret-keys --with-colons --fingerprint | sed -n 's/^fpr:::::::::\([[:alnum:]]\+\):/\1/p'
Gilles 'SO- deja de ser malvado'
fuente
¡Excelente! Pensé que la huella digital solo está disponible en claves públicas.
Xiè Jìléi
¡Uy! Estoy equivocado, no se pudo obtener la huella digital, el comando Yeilds: gpg: clave XXXXXXXX: clave secreta sin clave pública - gpg omitido: clave de lectura de error: clave secreta no disponible De hecho, solo me pregunto por qué ` si | ... 'no funciona, y creo que la única forma es parchear en gpg. Gracias
Xiè Jìléi
3

Sé que este tema es antiguo y que la respuesta se parece un poco a Gilles, pero creo que responde totalmente a la pregunta (ya que tuve el mismo tipo de problemas que OP):

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

Combiné las respuestas de Gilles y Dolanor en este revestimiento que es útil en caso de que desee eliminar una clave específica:

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

No responde la pregunta original, pero podría ser útil para otra persona.

Nikolaos Georgiou
fuente
1

Exporte las claves que desea conservar, elimine el archivo y vuelva a crear su anillo.

Aaron Digulla
fuente
Prefiero parchear y recompilar gpg.
Xiè Jìléi