Respuestas:
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
$
pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY
, ¿qué debo hacer a continuación?
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) <cdimage@ubuntu.com>
La identificación de la clave será EFE21092
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).
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 <jcameron@webmin.com>
sub 1024g/1B24BE83 2002-02-28
Estoy seguro de que solo la clave webmin en mi sistema tiene jcameron
que 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 siempregrep '${UNIQUE}' -B 1
: tome solo la línea que contiene la cadena de clave única jcameron
y -B 1
la 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 pup
identificacióncut -d " " -f 4
: tome la cuarta palabra de esa línea (la primera es pub
que 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#
cláusula if es la culpable?
$#
entonces no. Devuelve la cantidad de parámetros dados.
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 FOOBAR
está 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 FOOBAR
está el nombre de UID
16.04
comando 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
apt-key list
formato ha cambiado. Ahora parece estar funcionando de nuevo. (EDITAR: recuerde ejecutar esto como superusuario)
Software & Updates-->Authentication
no parece funcionar (no puede eliminar ninguna clave de software confiable). En cambio, los clds cmds dados a continuación tuvieron que ser utilizados.