Как я могу удалить ключ gpg, который я добавил, используя apt-key add -?

146

Мне больше не нужен ключ в связке ключей моего сервера. Возможно ли это убрать? Я добавил ключ, используя эту команду:

 curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -

Спасибо за помощь

Раймонд
источник
Я нашел этот вопрос полезным, потому что в настоящее время вызываемый графический интерфейс Ubuntu 18.04 Software & Updates-->Authentication, похоже, не работает (он не может удалить какой-либо ключ доверенного программного обеспечения). Вместо этого необходимо использовать приведенные ниже параметры.
Солнечный Медведь

Ответы:

198

Сначала вам нужно найти идентификатор ключа добавленного вами ключа. Сделайте это командой:

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
$
Нитин Венкатеш
источник
@Raymond Нет проблем :)
Нитин Венкатеш
1
Ах, я вижу, что уникальный идентификатор находится в строке, обозначенной как pub, а не в строке, обозначенной как uid.
Ctrl-Alt-Delor
6
на Ubuntu 16.10 результаты кажутся немного другими:pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
mxdsp
Похоже, это нужно обновить до 18.04
kennyB
После удаления ключа я столкнулся с новой проблемой The following signatures couldn't be verified because the public key is not available: NO_PUBKEY, что мне делать дальше?
Кори
126

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

Wesam
источник
17
Очень полезно, спасибо. Это крайне бесполезный UX.
SColvin
11
@Solvin вы можете просто сделать, sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"и я думаю, что безопаснее использовать весь отпечаток пальца, у keyid могут быть дубликаты (по крайней мере, когда вы используете PGP для электронных писем, я прочитал, что вы должны поделиться своим отпечатком всего, а не только keyid).
baptx
1
Очень полезно, очень верно и для 17.10!
Хартмут П.
2
И для 18.04.1.
Расс Бейтман
Спасибо. Ужасное дизайнерское решение.
Брайан Смит
4

Я сделал короткий скрипт, чтобы все было проще, и использовал строку вместо идентификатора.

Вы можете использовать мой скрипт, если ключ содержит уникальную строку, которую вы знаете.
например, в моем случае для вебмин

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: этот файл больше не нужен
derHugo
источник
Я запустил это без параметра, и он просто уничтожил все мои ключи. ; (
Габриэль Ярмарка
Если у кого-нибудь еще есть ключи, я смог исправить это, выполнив следующие инструкции: askubuntu.com/a/145933/13693
Gabriel Fair
Ху? Как это случилось? Он должен завершиться с «Без
указания
@derHugo не уверен, но может ли быть так, что #в этом случае, если предложение является виновником?
умолчанию
@ раздумий, если ты имеешь в виду, $#то нет. Возвращает количество заданных параметров.
derHugo
2

Я знаю, что могу опоздать, но просто хотел поделиться этой однострочной командой, чтобы добиться этого.

ПРИМЕЧАНИЕ . Это будет работать только в том случае, если вывод является уникальным ключом.


Версии 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.

Дэвид Табернеро М.
источник
1
Я не уверен, почему, но я получил ошибку, когда попытался запустить 16.04указанную вами команду. awk: line 1: syntax error at or near {Но угловые скобки совпадают, поэтому я не уверен, почему это не сработает
Габриэль Фэйр
@GabrielFair Спасибо, что заметили, еще в июне он работал (я скопировал его с моей консоли), но теперь кажется, что он был обновлен и apt-key listформат изменился. Теперь, похоже, снова работает. (РЕДАКТИРОВАТЬ: Не забудьте запустить это как суперпользователь)
Дэвид Табернеро М.