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

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

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

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

На 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 1092uid           [ unknown] Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com>

Идентификатор ключа будет EFE21092

Сначала вам нужно найти идентификатор ключа, который вы добавили. Сделайте это с помощью команды:

sudo apt-key list

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

pub   1024R/B455BEF0 2010-07-29uid                  Launchpad clicompanion-nightlies

Как только вы определитесь, какой ключ удалить, используйте команду sudo apt-key del <keyid> где <keyid> заменяется фактическим идентификатором ключа, который вы хотите удалить из своей связки ключей.

$ sudo apt-key del B455BEF0$ apt-key list | grep clicompan$

Обновление для Ubuntu 20.04

после запуска

sudo apt-key list

вы должны получить список подходящих ключей:

/etc/apt/trusted.gpg--------------------pub   rsa4096 2016-04-12 [SC]      EB4C 1BFD 4F04 2F6D DDCC  EC91 7721 F63B D38B 4796uid           [ unknown] Google Inc. (Linux Packages Signing Authority) <linux-packages-keymaster@google.com>sub   rsa4096 2019-07-22 [S] [expires: 2022-07-21]pub   rsa4096 2017-04-11 [SC] [expired: 2019-09-28]      D4CC 8597 4C31 396B 18B3  6837 D615 560B A5C7 FF72uid           [ expired] Opera Software Archive Automatic Signing Key 2017 <packager@opera.com>pub   rsa4096 2019-09-12 [SC] [expires: 2021-09-11]      68E9 B2B0 3661 EE3C 44F7  0750 4B8E C3BA ABDC 4346uid           [ unknown] Opera Software Archive Automatic Signing Key 2019 <packager@opera.com>sub   rsa4096 2019-09-12 [E] [expires: 2021-09-11]pub   rsa4096 2017-03-13 [SC]      8CAE 012E BFAC 38B1 7A93  7CD8 C5E2 2450 0C12 89C0uid           [ unknown] TeamViewer GmbH (TeamViewer Linux 2017) <support@teamviewer.com>sub   rsa4096 2017-03-13 [E]

под uid у вас есть название приложения, например:

[ unknown] Opera Software Archive Automatic Signing Key 2019 <packager@opera.com>

и ключ, который вы хотите удалить, находится над ним:

    D4CC 8597 4C31 396B 18B3  6837 D615 560B A5C7 FF72  <-- THAT'S THE KEYuid           [ expired] Opera Software Archive Automatic Signing Key 2017 <packager@opera.com>

и вы удаляете его, помещая этот ключ в двойные или одинарные кавычки, как это:

sudo apt-key del "D4CC 8597 4C31 396B 18B3  6837 D615 560B A5C7 FF72"

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

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

pub   1024D/11F63C51 2002-02-28uid                  Jamie Cameron <jcameron@webmin.com>sub   1024g/1B24BE83 2002-02-28

Я уверен, что только ключ webmin в моей системе имеет jcameron затем я использую этот скрипт для удаления соответствующего ключа.

Я сохранил его как ~/removeAptKey

и запустите его как

sudo ./removeAptKey jcameron

Вывод должен быть чем-то вроде

KEYID: 11F63C51OK

Вот мой сценарий:

#!/bin/bashfunction 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 1fiif [[ $# -eq 0 ]]then    echo "No key name provided"    exit 1fiUNIQUE=$1sudo apt-key list | grep "${UNIQUE}" -B 1 > result.tempLENGTH=$(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 2fiif [[ ${LENGTH} != 2 ]]then    echo "Key not found. Doing nothing."    printKeys    exit 3fiKEYID=$(cat result.temp | grep 'pub' | cut -d " " -f 4 | cut -d "/" -f 2)echo "KEYID: "$KEYIDapt-key del ${KEYID}rm result.temp

Сначала я получаю две верхние строки блока моего ключа:

  • sudo apt-key list: перечисляет подходящие ключи, как обычно
  • 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.

Если у вас случайно есть .asc ключевой файл, вы можете быть уверены, что удаляете правильный ключ с помощью такой команды. (Заменить mykey.asc с вашим ключевым файлом ниже.)

apt-key del "$(gpg -n -q --import --import-options import-show mykey.asc | grep '^pub' -A 1 | tail -n 1 | xargs)"

Эта команда, похоже, работает в Ubuntu 20.04. Заслуга в том, что gpg команда переходит к максшлепциг за их ответ здесь.