¿Cómo puedo eliminar la clave gpg que agregué usando apt-key add -?

146

Ya no necesito la clave en el llavero de mi servidor. ¿Es posible eliminarlo? Agregué la clave usando este comando:

 curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -

Gracias por ayudar

Raymond
fuente
Encontré esta pregunta útil porque actualmente la GUI de Ubuntu 18.04 llamada Software & Updates-->Authenticationno parece funcionar (no puede eliminar ninguna clave de software confiable). En cambio, los clds cmds dados a continuación tuvieron que ser utilizados.
Sun Bear

Respuestas:

198

Primero necesita encontrar la identificación de la clave que agregó. Haga esto por el comando:

sudo apt-key list

Enumerará todas las claves que tiene, con cada entrada así:

pub   1024R/B455BEF0 2010-07-29
uid                  Launchpad clicompanion-nightlies

Una vez que haya descubierto qué clave eliminar, use el comando sudo apt-key del <keyid>donde <keyid>se reemplaza con el keyid real de la clave que desea eliminar de su llavero.

$ sudo apt-key del B455BEF0
$ apt-key list | grep clicompan
$
Nitin Venkatesh
fuente
@Raymond No problemo :)
Nitin Venkatesh
1
Ah, veo que la identificación única está en la línea etiquetada pub, no en la línea etiquetada uid.
ctrl-alt-delor
66
en ubuntu 16.10 los resultados parecen un poco diferentes:pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
mxdsp
Parece que esto necesita ser actualizado para 18.04
kennyB
Después de eliminar la clave, encontré un nuevo problema The following signatures couldn't be verified because the public key is not available: NO_PUBKEY, ¿qué debo hacer a continuación?
Corey
126

En 16.10, la identificación de la clave corta ya no se muestra cuando utiliza el comando de lista, pero en realidad son los últimos 8 caracteres del hexadecimal largo.

Entonces, por ejemplo, la identificación de la clave para la siguiente clave

/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg
------------------------------------------------------
pub   rsa4096 2012-05-11 [SC]
      8439 38DF 228D 22F7 B374  2BC0 D94A A3F0 EFE2 1092
uid           [ unknown] Ubuntu CD Image Automatic Signing Key (2012) <[email protected]>

La identificación de la clave será EFE21092

Wesam
fuente
17
Muy útil, gracias. Esto es extremadamente inútil UX.
SColvin
11
@SColvin puede hacerlo sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"y creo que es más seguro usar toda la huella digital, el keyid podría tener duplicados (al menos cuando usa PGP para correos electrónicos, leí que debe compartir toda su huella digital y no solo el keyid).
baptx
1
Muy útil, muy cierto también para 17.10!
Hartmut P.
2
Y para 18.04.1.
Russ Bateman el
Gracias. Horrible decisión de diseño.
Brian Smith
4

Hice una secuencia de comandos corta para facilitar las cosas y usar una cadena en lugar de la identificación.

Puedes usar mi script si la clave contiene una cadena única que conoces.
por ejemplo, en mi caso para webmin

pub   1024D/11F63C51 2002-02-28
uid                  Jamie Cameron <[email protected]>
sub   1024g/1B24BE83 2002-02-28

Estoy seguro de que solo la clave webmin en mi sistema tiene jcameronque usar este script para eliminar la clave correspondiente.

Lo guardé como ~/removeAptKey

y ejecutarlo como

sudo ./removeAptKey jcameron

La salida debería ser algo como

KEYID: 11F63C51
OK

Aquí está mi guión:

#!/bin/bash

function printKeys(){
    echo "Installed keys are"
    echo ""
    sudo apt-key list
}

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

if [[ $# -eq 0 ]]
then
    echo "No key name provided"
    exit 1
fi

UNIQUE=$1

sudo apt-key list | grep "${UNIQUE}" -B 1 > result.temp

LENGTH=$(cat result.temp | wc -l)

if [[ ${LENGTH} -gt 2 ]]
then
    echo "Attention you found more than 1 key. Use a more specific string."
    printKeys
    exit 2
fi

if [[ ${LENGTH} != 2 ]]
then
    echo "Key not found. Doing nothing."
    printKeys
    exit 3
fi

KEYID=$(cat result.temp | grep 'pub' | cut -d " " -f 4 | cut -d "/" -f 2)
echo "KEYID: "$KEYID

apt-key del ${KEYID}

rm result.temp

Primero obtengo las dos líneas superiores del bloque de mi llave:

  • sudo apt-key list: enumera las teclas apt como siempre
  • grep '${UNIQUE}' -B 1: tome solo la línea que contiene la cadena de clave única jcamerony -B 1la línea anterior
  • > result.temp: Guárdelo en un archivo (que luego se elimina)

Si esto devuelve exactamente 2 líneas (-> obtuve exactamente 1 clave) sigo adelante:

  • grep 'pub': Ahora toma solo la línea con la pupidentificación
  • cut -d " " -f 4: tome la cuarta palabra de esa línea (la primera es pubque vienen dos espacios, que la cadena que estamos después de ``)
  • cut -d "/" -f 2: tomar solo la parte posterior /

Y finalmente elimine esta clave y limpie

  • apt-key del ${KEYID}(en mi caso 11F63C51)
  • rm result.temp: ya no necesito este archivo
derHugo
fuente
Ejecuté esto sin un parámetro y simplemente borró todas mis claves. ; (
Gabriel Fair
Si alguien más ha borrado sus llaves, pude arreglarlo siguiendo estas instrucciones: askubuntu.com/a/145933/13693
Gabriel Fair
Hu? ¿Cómo pasó esto? Debería salir con un "No se proporcionó ningún nombre de clave" si no hubiera ningún parámetro ..
derHugo
@derHugo no estoy seguro, pero ¿podría ser que la #cláusula if es la culpable?
Desconocido el
@defuzed si quieres decir $#entonces no. Devuelve la cantidad de parámetros dados.
derHugo
2

Sé que podría llegar tarde, pero solo quería compartir este comando de una línea para lograr esto.

NOTA : Esto solo funcionará si la salida es una clave única.


Versiones de Ubuntu hasta 16.04 (ACTUALIZADAS 2018-12-22):

apt-key del $(apt-key list | awk 'NR=='$(apt-key list | grep --line-number --regexp "FOOBAR" | cut --fields 1 --delimiter ":")'{print;exit}' | awk '{print $2}' | cut --fields 2 --delimiter "/")

donde FOOBARestá el nombre de UID


Versiones de Ubuntu de 16.10:

apt-key del $(apt-key list | awk 'NR=='`expr $(apt-key list | grep --line-number --regexp "FOOBAR" | cut --fields 1 --delimiter ":") - 1`'{print;exit}')

donde FOOBARestá el nombre de UID

David Tabernero M.
fuente
1
No estoy seguro de por qué, pero recibí un error cuando intenté ejecutar el 16.04comando que proporcionó. awk: line 1: syntax error at or near {Pero las llaves angulares coinciden, así que no estoy seguro de por qué esto no funciona
Gabriel Fair
@GabrielFair Gracias por notarlo, en junio ha estado funcionando (lo copié y lo pegué desde mi consola) pero ahora parece que se ha actualizado y el apt-key listformato ha cambiado. Ahora parece estar funcionando de nuevo. (EDITAR: recuerde ejecutar esto como superusuario)
David Tabernero M.