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

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

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

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

8 ответов

Решение

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

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
$

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

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

после бега

sudo apt-key list

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

/etc/apt/trusted.gpg
--------------------
pub   rsa4096 2016-04-12 [SC]
      EB4C 1BFD 4F04 2F6D DDCC  EC91 7721 F63B D38B 4796
uid           [ 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 FF72
uid           [ 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 4346
uid           [ 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 89C0
uid           [ 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 KEY
uid           [ 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"

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

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

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.

Я сделал это,

      sudo apt-key list

Найдите ключ с истекшим сроком действия, а затем удалите его, в моем случае

      sudo apt-key del "31CF B0B6 5659 B5D4 0DEE  C98D DFA1 75A7 5104 960E"

Тогда сделайте

      sudo apt update

Удаленный ключ скажет, что он недоступен, обратите внимание на эту строку, в моем случае DFA175A75104960E

Затем обновите ключ следующим образом, для моего случая требуется обновление DFA175A75104960E,

      sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DFA175A75104960E

Должно работать сейчас.

Если у вас есть .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Команда обращается к maxschlepzig за ответом здесь .

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

Другие вопросы по тегам