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 jcameronche 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 jcamerone -B 1la 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' pupid chiavecut -d " " -f 4: prendi la quarta parola di quella riga (la prima è pubche 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.04comando 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 listformato sia cambiato. Ora sembra funzionare di nuovo. (EDIT: Ricorda di eseguire questo come superutente)
Software & Updates-->Authenticationnon sembra funzionare (non può rimuovere alcuna chiave software affidabile). Invece, dovevano essere usati i cli cmds indicati di seguito.