Ответы:
Сначала вам нужно найти идентификатор ключа добавленного вами ключа. Сделайте это командой:
sudo apt-key list
В нем будут перечислены все ключи, которые у вас есть, каждая запись выглядит следующим образом:
pub 1024R/B455BEF0 2010-07-29
uid Launchpad clicompanion-nightlies
После того, как вы выяснили, какой ключ удалить, используйте команду, sudo apt-key del <keyid>
где <keyid>
вместо фактического ключа указан ключ, который вы хотите удалить из вашего набора ключей.
$ 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
, что мне делать дальше?
16.10 идентификатор короткого ключа больше не отображается при использовании команды list, но на самом деле это последние 8 символов длинного гексагона.
Так, например, идентификатор ключа для следующего ключа
/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>
Идентификатор ключа будет EFE21092
sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"
и я думаю, что безопаснее использовать весь отпечаток пальца, у keyid могут быть дубликаты (по крайней мере, когда вы используете PGP для электронных писем, я прочитал, что вы должны поделиться своим отпечатком всего, а не только keyid).
Я сделал короткий скрипт, чтобы все было проще, и использовал строку вместо идентификатора.
Вы можете использовать мой скрипт, если ключ содержит уникальную строку, которую вы знаете.
например, в моем случае для вебмин
pub 1024D/11F63C51 2002-02-28
uid Jamie Cameron <jcameron@webmin.com>
sub 1024g/1B24BE83 2002-02-28
Я уверен, что только ключ webmin в моей системе имеет, jcameron
чем я использую этот скрипт, чтобы удалить соответствующий ключ.
Я сохранил как ~/removeAptKey
и запустить его как
sudo ./removeAptKey jcameron
Выход должен быть что-то вроде
KEYID: 11F63C51
OK
Вот мой сценарий:
#!/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
Сначала я получаю две верхние строки блока моего ключа:
sudo apt-key list
: список ключей apt как обычноgrep '${UNIQUE}' -B 1
: взять только строку, содержащую строку уникального ключа jcameron
и -B 1
строку перед> result.temp
: Сохранить его в файл (который позже будет удален)Если это возвращает ровно 2 строки (-> получил ровно 1 ключ), я продолжаю:
grep 'pub'
: Теперь взять только строку с pup
идентификатором ключаcut -d " " -f 4
: возьмите 4-е слово этой строки (первое - это pub
два пробела, чем строка после ``)cut -d "/" -f 2
: принять только часть после /
И, наконец, удалить этот ключ и очистить
apt-key del ${KEYID}
(в моем случае 11F63C51
)rm result.temp
: этот файл больше не нужен#
в этом случае, если предложение является виновником?
$#
то нет. Возвращает количество заданных параметров.
Я знаю, что могу опоздать, но просто хотел поделиться этой однострочной командой, чтобы добиться этого.
ПРИМЕЧАНИЕ . Это будет работать только в том случае, если вывод является уникальным ключом.
Версии Ubuntu до 16.04 (ОБНОВЛЕНО 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 "/")
где FOOBAR
имя UID.
Версии Ubuntu от 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}')
где FOOBAR
имя UID.
16.04
указанную вами команду. awk: line 1: syntax error at or near {
Но угловые скобки совпадают, поэтому я не уверен, почему это не сработает
apt-key list
формат изменился. Теперь, похоже, снова работает. (РЕДАКТИРОВАТЬ: Не забудьте запустить это как суперпользователь)
Software & Updates-->Authentication
, похоже, не работает (он не может удалить какой-либо ключ доверенного программного обеспечения). Вместо этого необходимо использовать приведенные ниже параметры.