Odpowiedzi:
Najpierw musisz znaleźć identyfikator klucza, który dodałeś. Zrób to za pomocą polecenia:
sudo apt-key list
Wyświetla listę wszystkich posiadanych kluczy, a każdy wpis wygląda następująco:
pub 1024R/B455BEF0 2010-07-29
uid Launchpad clicompanion-nightlies
Po ustaleniu, który klucz należy usunąć, użyj polecenia sudo apt-key del <keyid>
gdzie <keyid>
jest zastąpione rzeczywistym kluczem klucza, który chcesz usunąć z kluczy.
$ 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
, co powinienem zrobić dalej?
16.10 identyfikator skrótu nie jest już wyświetlany, gdy używasz polecenia list, ale w rzeczywistości jest to ostatnie 8 znaków długiego heksa.
Na przykład identyfikator klucza dla następującego klucza
/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>
Identyfikator klucza to EFE21092
sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"
i myślę, że bezpieczniej jest używać całego odcisku palca, keyid może mieć duplikaty (przynajmniej kiedy używasz PGP do e-maili, czytam, że powinieneś udostępnić cały odcisk palca, a nie tylko keyid).
Zrobiłem krótki skrypt, aby ułatwić sobie używanie łańcucha zamiast identyfikatora.
Możesz użyć mojego skryptu, jeśli klucz zawiera unikatowy ciąg znaków, który znasz.
np. w moim przypadku dla webmina
pub 1024D/11F63C51 2002-02-28
uid Jamie Cameron <jcameron@webmin.com>
sub 1024g/1B24BE83 2002-02-28
Jestem pewien, że tylko klucz webmin w moim systemie ma jcameron
ten skrypt do usunięcia odpowiedniego klucza.
Zapisałem to jako ~/removeAptKey
i uruchom go jako
sudo ./removeAptKey jcameron
Wyjście powinno być coś w rodzaju
KEYID: 11F63C51
OK
Oto mój skrypt:
#!/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
Najpierw otrzymuję dwie górne linie bloku mojego klucza:
sudo apt-key list
: wyświetla klawisze apt jak zwyklegrep '${UNIQUE}' -B 1
: weź tylko wiersz zawierający unikatowy ciąg klucza jcameron
i -B 1
wiersz wcześniej> result.temp
: Zapisz go w pliku (który jest później usuwany)Jeśli to zwróci dokładnie 2 linie (-> dostałem dokładnie 1 klucz), przechodzę dalej:
grep 'pub'
: Teraz weź tylko wiersz z pup
identyfikatorem kluczacut -d " " -f 4
: weź 4 słowo tego wiersza (pierwsze to pub
dwie spacje, niż ciąg, który szukamy po ``)cut -d "/" -f 2
: weź tylko część po /
I wreszcie usuń ten klucz i oczyść
apt-key del ${KEYID}
(w moim przypadku 11F63C51
)rm result.temp
: nie potrzebujesz już tego pliku#
że winowajcą jest klauzula if?
$#
to nie. Zwraca ilość podanych parametrów.
Wiem, że mogę się spóźnić, ale po prostu chciałem udostępnić to jedno wierszowe polecenie, aby to osiągnąć.
UWAGA : Działa to tylko wtedy, gdy wyjście jest unikalnym kluczem.
Wersje Ubuntu do 16.04 (AKTUALIZACJA 22.12.2018):
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 "/")
gdzie FOOBAR
jest nazwa UID.
Wersje Ubuntu od 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}')
gdzie FOOBAR
jest nazwa UID.
16.04
podanego polecenia. awk: line 1: syntax error at or near {
Ale nawiasy klamrowe pasują do siebie, więc nie jestem pewien, dlaczego to nie działa
apt-key list
format się zmienił. Teraz wydaje się, że znów działa. (EDYCJA: Pamiętaj, aby uruchomić to jako superużytkownik)
Software & Updates-->Authentication
nie wydaje się działać (nie można usunąć żadnego zaufanego klucza oprogramowania). Zamiast tego należało zastosować podane poniżej polecenia cmli.