Як я можу видалити gpg ключ, який я додав за допомогою додавання apt-key -?


146

Мені вже не потрібен ключ у ключі мого сервера. Чи можливо її видалити? Я додав ключ за допомогою цієї команди:

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

Дякуємо за допомогу


Я вважаю це питання корисним, оскільки наразі графічний інтерфейс Ubuntu 18.04 Software & Updates-->Authentication, схоже, не працює (він не може видалити будь-який надійний програмний ключ). Натомість довелося використовувати наведені нижче клітинки cmds.
Ведмідь Сонця

Відповіді:


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
Ах, я бачу, унікальний ідентифікатор знаходиться в рядку з написом паб, а не в рядку з написом 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, що мені робити далі?
Корі

124

16.10 короткий ідентифікатор клавіші більше не відображається при використанні команди списку, але насправді це останні 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


17
Дуже корисно, дякую. Це вкрай непомітний UX.
SColvin

10
@SColvin ви можете просто зробити, 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.
Russ Bateman

Дякую. Жахливе дизайнерське рішення.
Брайан Сміт

4

Я зробив короткий сценарій, щоб полегшити ситуацію і використовуючи рядок замість id.

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

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: перераховує влучні клавіші як завжди
  • 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: цей файл більше не потрібен

Я запустив це без параметра, і він просто видалив усі мої клавіші. ; (
Габріель Ярмарок

Якщо у кого-небудь ще є свої ключі, я зміг це виправити, дотримуючись цих інструкцій: askubuntu.com/a/145933/13693
Габріель Ярмарок

Ху? Як це сталося? Він повинен вийти з "Не вказано ім'я ключа", якщо не було параметра.
derHugo

@derHugo не впевнений, але чи може це бути те, що #в тому випадку, якщо винуватець пункту?
розм’якшено

@defuzed, якщо ви маєте на увазі, $#то ні. Він повертає кількість заданих параметрів.
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змінився формат. Зараз, здається, знову працює. (EDIT: Не забудьте запустити це як суперпользователь)
David Tabernero M.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.