«Нет открытого ключа» при обновлении apt-get


133

При выполнении apt-get updateя получаю следующую ошибку:

root@ADS3-Debian6:/home/aluno# apt-get update
Atingido http://sft.if.usp.br squeeze Release.gpg
Ign http://sft.if.usp.br/debian/ squeeze/contrib Translation-en
Ign http://sft.if.usp.br/debian/ squeeze/contrib Translation-pt
Ign http://sft.if.usp.br/debian/ squeeze/contrib Translation-pt_BR

(...)

Obter:10 http://security.debian.org squeeze/updates/non-free i386 Packages [14 B]
Baixados 612 kB em 4s (125 kB/s)                    
Lendo listas de pacotes... Pronto
There is no public key available for the following key IDs: 8B48AD6246925553

2
... и та строка, которую ты выбрал, важна. Это позволило бы нам определить, какие ключи вам не хватает (при условии установки пакетов ключей - предпочтительно с доверенных носителей - что, по мнению
Руды,

1
Вы не должны позволять вашей кошке ходить по клавиатуре. :-) ⁠
G-Man

Ответы:


173

Другие ответы будут работать или нет, в зависимости от того, присутствует или нет ключ '8B48AD6246925553' в пакетах, которые они указывают.

Если вам нужен ключ, вы должны получить этот ключ, и где его найти, он находится на сервере ключей (очень вероятно, что подойдет любой сервер ключей):

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553

Это сработало и для меня, а не для других ответов здесь.
Саи Киран

@starbeamrainbowlabs теперь это! =)
Этот бразильский парень

@ThatBrazilianGuy: D
starbeamrainbowlabs

4
Есть ли способ определить, является ли полученный ключ леггитом, чтобы я мог выполнить такую ​​опасную операцию, как добавление глобального apt-trust к какому-либо произвольному ключу? Есть ли способ проверить достоверность ключа после его получения? Какие шаги необходимо выполнить для проверки ключа? Например, единственное, что у вас есть, это ftp-master.debian.org/keys/ziyi_key_2002.asc, так как вам получить самый последний ключ, не нарушая цепочку доверия?
Тино

1
@ThatBrazilianGuy: Тот факт, что это ваш вопрос, не дает вам права оскорблять ответ.
G-Man

76

Я рекомендую вам следовать ответу @ mariotomo, а не следующим шагам:


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

sudo aptitude install debian-archive-keyring

Рекомендации


Последние 8 шестнадцатеричных цифр делятся с этим, так что он, вероятно, жалуется на wheezy. К несчастью со стороны ОП, выполнили это: pub 4096R / 46925553 2012-04-27 [истекает: 2020-04-25] uid Ключ автоматической подписи архива Debian (7.0 / wheezy) <ftpmaster@debian.org>
Мартин Дори

5
Является ли на debian-keyringсамом деле нужно? У меня получилось просто debian-archive-keyring.
x-yuri

Не удивительно, что разные шестнадцатеричные числа могут требовать разных решений. Я поставил кавычки вокруг числа в моем поиске Google, чтобы вызвать дословный поиск этого числа, и я попал на эту страницу, которая исправила мою проблему: reddit.com/r/linux4noobs/comments/4grdo7/… (ответ @ mariotomo возможно, тоже сработало - я не пробовал)
Майкл Шепер

debian-keyringэто не требуется.
x-yuri

38

Рекомендую:

$ sudo apt-get install debian-archive-keyring
$ sudo apt-key update

Это лучше, чем другие подходы, потому что он не устанавливает debian-keyring, что является большим и 99% времени ненужным.


1
Это было все, что мне было нужно - отлично сработало для меня!
Harperville

Работай как шарм!
Wilbeibi

1
Это было лучшее решение для меня, так как оно лучше вписывается в контейнер Docker. Однако обратите внимание, что (по крайней мере, в Docker) вы должны сначала установить только этот пакет, затем сделать второй apt-get update, а затем установить пакеты, которые вам действительно нужны.
Malvineous

Debian 10: Предупреждение: «обновление apt-key» устарело и больше не должно использоваться! Примечание. В вашем дистрибутиве эта команда
запрещена

На самом деле, вам может понадобиться установить debian-archive-keyring, даже если у вас установлена ​​debian-keyring в его последней версии
Ángel

17

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

Если сообщение было:

There is no public key available for the following key IDs: 1397BC53640DB551

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

for n in `ls /var/lib/apt/lists/*gpg`; do echo "$n" ; gpg --list-packets "$n" | grep 1397BC53640DB551; done

Который в этом примере является хранилищем Google для Chrome:

/var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_Release.gpg

Если вы доверяете Google, его правительству и т. Д., Вам следует выяснить, где находится ключ, и добавить его:

wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add -

Исправлено для меня :) Спасибо! Но просто любопытно, что не так? Что делает первая команда, и что делает вторая? Должно ли это решить все проблемы? Моя проблема была также с Google Chrome.
Рохан

И первая команда что-то меняет с gpg? Там написано, что он создал файл conf gpg.conf, и я не знаю, хочу ли я этого.
Рохан

Первый действительно ищет ключ в вашем списке пакетов, чтобы увидеть нарушающий пакет. Второй загружает ключ и добавляет его в вашу систему. Первая команда в этом случае бесполезна, но хороша как общий подход.
Марко Сулла

3

Я столкнулся с той же проблемой в Linux Mint (Kernel Version 3.13.0-24) и смог решить ее с помощью команд:

gpg --recv-keys <the-reported-key>

gpg --export <the-reported-key> | apt-key add -

Очки, которые следует отметить:

1) Команды были выполнены в порядке 2) Команды были выполнены от имени пользователя root

Вежливость этого ответа.


1

Как альтернатива:

$ sudo apt-get install debian-keyring debian-archive-keyring
$ sudo apt-key update

6
Пожалуйста, не рекламируйте свой блог в ваших ответах. Вот для чего ваша биография.
SLM

1

Мой ответ - небольшое обновление (IMHO, YMMV) на @mariotomo (за которого я проголосовал) в следующем скрипте bash

  • также использует gpg
  • параметризует больше
  • (также использует другой сервер ключей, хотя в этом случае я подозреваю, что это мало что меняет)

Вы также можете закомментировать evalстроку для «пробного запуска»: тогда скриптлет покажет вам только то, что он намерен делать, фактически не делая этого. Просто убедитесь, что меняете значение NO_PUBKEYкаждый раз, когда вы используете это (вы также можете изменить KEYSERVERпо желанию):

NO_PUBKEY='1397BC53640DB551' # CHANGE TO THE VALUE CITED IN YOUR ERROR MESSAGE!
KEYSERVER='keys.gnupg.net'

NO_PUBKEY_LEN="${#NO_PUBKEY}"
echo "NO_PUBKEY_LEN='${NO_PUBKEY_LEN}'"     # for sanity or debugging
# note following works because bash arrays have 0-based indices
NO_PUBKEY_2ND_HALF_START=$(( NO_PUBKEY_LEN/2 ))
echo "NO_PUBKEY_2ND_HALF_START='${NO_PUBKEY_2ND_HALF_START}'" # ditto
NO_PUBKEY_2ND_HALF="${NO_PUBKEY:${NO_PUBKEY_2ND_HALF_START}}"
echo "NO_PUBKEY_2ND_HALF='${NO_PUBKEY_2ND_HALF}'"             # ditto

for CMD in \
  'date' \
  "gpg --keyserver ${KEYSERVER} --recv-keys ${NO_PUBKEY_2ND_HALF}" \
  'date' \
  "gpg -a --export ${NO_PUBKEY_2ND_HALF} | sudo apt-key add -" \
; do
  echo -e "${CMD}"
  eval "${CMD}"
done

0

Запустите, killall -q gpg-agentесли другие решения не работают. Это может сработать.

Я получал аналогичную ошибку для репозитория PPA в Ubuntu 18.04, и после того, как в прошлом месяце попробовал различные решения в Интернете, я наткнулся на gpg-agent и убил его. Затем хранилища PPA начали обновляться по факту sudo apt-get update. Я знаю, что это может поставить под угрозу безопасность, но иногда вам нужен пакет из PPA, а GPG просто не позволяет вам. Позже вы снова запускаете gpg-agent, и все возвращается на круги своя.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.