Risposte:
Per prima cosa devi trovare l'ID chiave della chiave che hai aggiunto. Fallo con il comando:
sudo apt-key list
Elencherà tutte le chiavi che hai, con ogni voce simile a questa:
pub 1024R/B455BEF0 2010-07-29
uid Launchpad clicompanion-nightlies
Una volta che hai capito quale chiave rimuovere, usa il comando sudo apt-key del <keyid>
dove <keyid>
viene sostituito con l'effettivo keyid della chiave che vuoi rimuovere dal tuo portachiavi.
$ 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
, cosa devo fare dopo?
Il 16.10 l'id tasto corto non viene più mostrato quando si utilizza il comando list, ma in realtà sono gli ultimi 8 caratteri dell'esagono lungo.
Ad esempio, l'id chiave per la chiave seguente
/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>
L'ID chiave sarà EFE21092
sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"
e penso che sia più sicuro usare l'intera impronta digitale, il keyid potrebbe avere duplicati (almeno quando usi PGP per le e-mail, ho letto che dovresti condividere l'intera impronta digitale e non solo il keyid).
Ho realizzato un breve script per semplificare le cose e usare una stringa anziché l'id.
Puoi usare il mio script se la chiave contiene una stringa univoca che conosci.
ad esempio nel mio caso per webmin
pub 1024D/11F63C51 2002-02-28
uid Jamie Cameron <jcameron@webmin.com>
sub 1024g/1B24BE83 2002-02-28
Sono sicuro che solo la chiave webmin sul mio sistema ha jcameron
che uso questo script per rimuovere la chiave corrispondente.
L'ho salvato come ~/removeAptKey
ed eseguilo come
sudo ./removeAptKey jcameron
L'uscita dovrebbe essere qualcosa di simile
KEYID: 11F63C51
OK
Ecco la mia sceneggiatura:
#!/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
Per prima cosa ottengo le due righe superiori del blocco della mia chiave:
sudo apt-key list
: elenca i tasti apt come al solitogrep '${UNIQUE}' -B 1
: accetta solo la riga contenente la stringa di chiavi univoca jcameron
e -B 1
la riga precedente> result.temp
: Salvalo in un file (che verrà successivamente rimosso)Se questo restituisce esattamente 2 righe (-> ho esattamente 1 chiave), passo avanti:
grep 'pub'
: Ora prendi solo la linea con l' pup
id chiavecut -d " " -f 4
: prendi la quarta parola di quella riga (la prima è pub
che arrivano due spazi, rispetto alla stringa che stiamo cercando ``)cut -d "/" -f 2
: prendi solo la parte successiva /
E infine cancella questa chiave e pulisci
apt-key del ${KEYID}
(nel mio caso 11F63C51
)rm result.temp
: non è più necessario questo file#
clausola if that sia il colpevole?
$#
allora no. Restituisce la quantità di determinati parametri.
So che potrei essere in ritardo, ma volevo solo condividere questo comando a una riga per raggiungere questo obiettivo.
NOTA : funzionerà solo se l'output è una chiave univoca.
Versioni di Ubuntu fino al 16.04 (AGGIORNATO 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 "/")
dove FOOBAR
è il nome UID.
Versioni di Ubuntu dalla 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}')
dove FOOBAR
è il nome UID.
16.04
comando fornito. awk: line 1: syntax error at or near {
Ma le parentesi angolari corrispondono, quindi non sono sicuro del motivo per cui non funziona
apt-key list
formato sia cambiato. Ora sembra funzionare di nuovo. (EDIT: Ricorda di eseguire questo come superutente)
Software & Updates-->Authentication
non sembra funzionare (non può rimuovere alcuna chiave software affidabile). Invece, dovevano essere usati i cli cmds indicati di seguito.