- Вопрос или проблема
- Этот ответ был актуален для Ubuntu 20.04 и предыдущих версий. Для Ubuntu 20.10 и более поздних версий смотрите этот ответ на StackOverflow.
- Оригинальный ответ:
- Ответ или решение
- 1. Понимание проблемы
- 2. Решение через терминал
- 3. Решение с использованием графического интерфейса
- Способ 1: Y-PPA-Manager
- Способ 2: Импорт ключа через Software Sources
- 4. Мануальная загрузка ключа
- 5. Завершение
- Заключение
Вопрос или проблема
Я добавил несколько дополнительных репозиториев с помощью программы Software Sources. Но когда я обновляю базу данных пакетов, я получаю ошибку, похожую на следующую:
W: GPG ошибка: http://ppa.launchpad.net trusty InRelease: Следующие подписи не могут быть проверены, потому что открытый ключ недоступен: NO_PUBKEY 8BAF9A6F
Я знаю, что могу исправить это, используя apt-key
в терминале, согласно официальной документации Ubuntu. Но я хотел бы сделать это графически. Есть ли способ сделать это без использования терминала?
Этот ответ был актуален для Ubuntu 20.04 и предыдущих версий. Для Ubuntu 20.10 и более поздних версий смотрите этот ответ на StackOverflow.
Краткая версия:
sudo mkdir -m 0755 -p /etc/apt/keyrings/
wget -O- https://example.com/EXAMPLE.gpg |
gpg --dearmor |
sudo tee /etc/apt/keyrings/EXAMPLE.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/EXAMPLE.gpg
echo "deb [signed-by=/etc/apt/keyrings/EXAMPLE.gpg] https://example.com/apt stable main" |
sudo tee /etc/apt/sources.list.d/EXAMPLE.list
sudo chmod 644 /etc/apt/sources.list.d/EXAMPLE.list
# По желанию (вы можете узнать адрес электронной почты / ID с помощью 'apt-key list')
sudo apt-key del [email protected]
Оригинальный ответ:
Выполните следующие команды в терминале:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <PUBKEY>
где <PUBKEY>
– это ваш отсутствующий открытый ключ для репозитория, например, 8BAF9A6F
.
Затем обновите:
sudo apt-get update
АЛЬТЕРНАТИВНЫЙ МЕТОД:
sudo gpg --keyserver pgpkeys.mit.edu --recv-key <PUBKEY>
sudo gpg -a --export <PUBKEY> | sudo apt-key add -
sudo apt-get update
Обратите внимание, что когда вы импортируете ключ таким образом, используя apt-key
, вы говорите системе, что доверяете ключу, который вы импортируете, для подписи программного обеспечения, которое будет использовать ваша система. Не делайте этого, если вы не уверены, что ключ действительно принадлежит дистрибьютору пакетов.
На данный момент самый простой способ решить эту проблему – это использовать Y-PPA-Manager (который теперь интегрирует скрипт launchpad-getkeys
с графическим интерфейсом).
-
Чтобы установить его, сначала добавьте репозиторий webupd8 для этой программы:
sudo add-apt-repository ppa:webupd8team/y-ppa-manager
-
Обновите список программного обеспечения и установите Y-PPA-Manager:
sudo apt-get update sudo apt-get install y-ppa-manager
-
Запустите y-ppa-manager (то есть введите
y-ppa-manager
и затем нажмите клавишу Enter). -
Когда появится главное окно y-ppa-manager, нажмите на “Дополнительно”.
-
В списке дополнительных задач выберите “Попробовать импортировать все отсутствующие GPG ключи” и нажмите OK.
Готово! Как сообщает диалоговое окно предупреждения при запуске операции, это может занять некоторое время (примерно 2 минуты для меня) в зависимости от того, сколько PPA у вас есть и скорости вашего соединения.
Это происходит, когда у вас нет подходящего открытого ключа для репозитория.
Чтобы решить эту проблему, используйте следующую команду:
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv 9BDB3D89CE49EC21
которая получает ключ с сервера ключей ubuntu. А затем это:
gpg --export --armor 9BDB3D89CE49EC21 | sudo apt-key add -
которая добавляет ключ в доверенные ключи apt.
Решение можно найти здесь & здесь & здесь.
Вам нужно получить и импортировать ключ.
Чтобы получить ключ с PPA, посетите страницу Launchpad соответствующего PPA. На каждой странице PPA на Launchpad вы найдете эту ссылку (2), после нажатия на ‘Технические детали об этом PPA’ (1):
Перейдите по ней и щелкните по ссылке ID ключа (3):
Сохраните страницу, это ваш файл ключа.
Теперь время импортировать его:
Программы > Центр программного обеспечения
,Правка > Источники программного обеспечения...
,- Введите свой пароль,
- Перейдите на вкладку
Аутентификация
и нажмитеИмпортировать файл ключа...
, наконец - Выберите сохраненный файл ключа и нажмите
OK
.
примечание: В последних версиях больше не считается хорошей практикой добавлять ключи PPA в хранилище ключей. Однако я оставлю этот ответ, но apt-key теперь устарел, поэтому рекомендуется следовать другим методам.
apt может обрабатывать только 40 ключей в /etc/apt/trusted.gpg.d. 41 ключ и вы получите ошибку GPG “no public key found”, даже если вы пройдете через все шаги, чтобы добавить отсутствующий ключ(и).
Проверьте, есть ли в этом файле неиспользуемые ключи от ppa(ов), которые вы больше не используете. Если все используются, подумайте о том, чтобы удалить некоторые ppa(ы) вместе с соответствующими файлами ключей в /etc/apt/trusted.gpg.d.
Кроме того, используя
sudo apt-key adv
Считается рискованным для безопасности и не рекомендуется, так как вы “подрываете всю концепцию безопасности, так как это не безопасный способ получения ключей по различным причинам (например: hkp – это протокол открытого текста, короткие и даже длинные идентификаторы ключей могут быть подделаны, …)“. http://ubuntuforums.org/showthread.php?t=2195579
Я считаю, что правильный способ добавить отсутствующие ключи (например, 1ABC2D34EF56GH78) это
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv 1ABC2D34EF56GH78
gpg --export --armor 1ABC2D34EF56GH78 | sudo apt-key add -
Есть маленький скрипт, упакованный в PPA WebUpd8, который я дам как единый .deb для скачивания, чтобы вы не добавляли целый PPA – который автоматически импортирует все отсутствующие GPG ключи.
Скачайте и установите Launchpad-getkeys (игнорируйте ~natty в его версии, он работает со всеми версиями Ubuntu от Karmic до Oneiric). После установки откройте терминал и введите:
sudo launchpad-getkeys
Если вы находитесь за прокси, дело немного усложняется, поэтому смотрите это для получения дополнительной информации.
Эта ошибка также может возникнуть, когда файл списка apt от PPA указывает на локальное хранилище ключей, например
deb [signed-by=/usr/share/keyrings/SOMETHING.gpg] https://download.something.org/something something/
И хотя этот файл может существовать на вашей системе (возможно, загружен с помощью предыдущей команды), он может быть недоступен для чтения из-за отсутствующих прав. Я только что исправил эту ошибку, выполнив
chmod 644 /usr/share/keyrings/*
после того, как загрузил файл ключа. Основной проблемой было использование sudo
, когда я уже был пользователем root. Это действительно странно, так как все это все равно root, и не было сообщения об ошибке доступа… но это исправило проблему.
Я столкнулся с аналогичной проблемой при установке Heroku. Ссылка ниже решила мою проблему –
http://naveenubuntu.blogspot.in/2011/08/fixing-gpg-keys-in-ubuntu.html
После исправления проблемы NO_PUBKEY
осталась проблема ниже
W: GPG ошибка: xhttp://toolbelt.heroku.com ./ Release: Следующие подписи были недействительными: BADSIG C927EBE00F1B0520 Heroku Release Engineering <[email protected]>
Чтобы исправить это, я выполнил следующие команды в терминале:
sudo -i
apt-get clean
cd /var/lib/apt
mv lists lists.old
mkdir -p lists/partial
apt-get clean
apt-get update
Источник – Ссылка на решение
Убедитесь, что у вас установлен apt-transport-https
:
dpkg -s apt-transport-https > /dev/null || bash -c "sudo apt-get update;
sudo apt-get install apt-transport-https -y"
Добавьте репозиторий:
curl https://repo.skype.com/data/SKYPE-GPG-KEY | sudo apt-key add -
echo "deb [arch=amd64] https://repo.skype.com/deb stable main" | sudo tee /etc/apt/sources.list.d/skype-stable.list
Установите Skype для Linux:
sudo apt-get update
sudo apt-get install skypeforlinux -y
Более allgemein, следующий метод должен работать для каждого репозитория. Прежде всего, поищите, с помощью поисковой системы, текст на сайте поставщика программы, который выглядит следующим образом:
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.1 (GNU/Linux)
[...]
-----END PGP PUBLIC KEY BLOCK-----
Такой текст, например, отображается на http://deb.opera.com. Скопируйте этот фрагмент, вставьте его в пустой файл, который вы создаете на своем рабочем столе. Это даст файл ключа.
Затем продолжите с импортом ключа:
- Программы > Центр программного обеспечения
- Правка > Источники программного обеспечения…, введите пароль
- Вкладка аутентификации, нажмите “Импортировать файл ключа…”
- Выберите сохраненный файл ключа и нажмите “Ок”.
Теперь вы можете удалить ранее созданный файл ключа.
Обновленная версия (Ubuntu 22.04 LTS)
Поскольку apt-key теперь устарел, и вы хотите использовать /etc/apt/trusted.gpg.d/
, вы можете использовать
sudo gpg --keyserver pgpkeys.mit.edu --recv-key <PUBKEY>
sudo mkdir -p /etc/apt/keyrings/
sudo gpg -a --export <PUBKEY> /etc/apt/keyrings/<your-keyfile-name>.gpg
# Теперь перейдите в /etc/apt/sources.list.d/<файл списка определения источника>, и
# добавьте [signed-by=/etc/apt/keyrings/<your-keyfile-name>.gpg] между deb и url, например:
# deb <добавьте сюда> https://...
<PUBKEY>
– это 8-символьный отпечаток, такой как 210976F2
, а <target name>
– это имя на ваш выбор, по которому вы будете знать этот ключ.
ИСПРАВЛЕНИЕ: Обновлено для повышения безопасности, взято из долгого ответа
Хорошо! Я наконец нашел способ!
Я протестировал все методы для исправления ошибки GPG NO_PUBKEY, и ничего мне не помогло.
Я удалил все содержимое папки /etc/apt/trusted.gpg.d
cd /etc/apt/trusted.gpg.d
sudo rm -R *
sudo apt-get update
И я использую метод Y-PPA-Manager, потому что мне слишком лень вручную создавать все паблики (слишком много): http://www.unixmen.com/fix-w-gpg-error-no_pubkey-ubuntu/
Снова выполните sudo apt-get update
и наконец все теперь работает отлично! Спасибо!
Исходный источник: пост #17 на https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1263540
У меня была такая же проблема с клиентом Updater от DynDNS.
Оказалось, что просто истекшие ключи.
Переустановка программного обеспечения (скачать новый .deb
с сайта, а затем использовать Центр программного обеспечения для переустановки) исправила проблему.
Сообщение об ошибке для справки:
W: GPG ошибка: http://cdn.dyn.com stable/ Release: Следующие подписи были недействительными: KEYEXPIRED 141943.......
Август 2021 года. Это то, что сработало для меня.
cd /etc/apt/trusted.gpg.d
sudo rm -R *
sudo apt-get update
Последняя строка вызовет ошибки отсутствующих ключей.
Что вам тогда нужно будет сделать, так это вручную установить каждый из ключей, указанных в ошибках
например, если ошибка говорит, что ваш отсутствующий PUB_KEY
– это 9BDB3D89CE49EC21
,
Вы можете вручную добавить ключ с помощью команды sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 9BDB3D89CE49EC21
Снова выполните sudo apt-get update
Повторите процесс для нового ключа, упомянутого в ошибке
Скажем, если новый ключ был 3BDB3D89CE49EC24
,
Просто вручную добавьте ключ с помощью команды sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3BDB3D89CE49EC24
Снова выполните sudo apt-get update и повторяйте процесс, пока все ошибки не исчезнут.
Затем вернитесь к сайту пакета, который вы пытались установить, и повторите процесс установки.
В моем случае ошибка проявлялась при попытке установить Sublime Text
Выполнение вышеупомянутого и возвращение к руководству по установке Sublime здесь решило проблемы.
Не забудьте проголосовать, если это сработало для вас. И это обязательно сработает.
Всегда хорошая идея проверить, кто подписывает репозиторий, проверяя проблемные файлы в /etc/apt/sources.list.d
Например, изучая файл mysql.list, показывается, где хранится ключ
### THIS FILE IS AUTOMATICALLY CONFIGURED ###
# Вы можете закомментировать записи ниже, но любые другие изменения могут быть потеряны.
# Используйте команду 'dpkg-reconfigure mysql-apt-config' как root для изменений.
deb [signed-by=/usr/share/keyrings/mysql-apt-config.gpg] http://repo.mysql.com/apt/ubuntu/ jammy mysql-apt-config
deb [signed-by=/usr/share/keyrings/mysql-apt-config.gpg] http://repo.mysql.com/apt/ubuntu/ jammy mysql-8.0
deb [signed-by=/usr/share/keyrings/mysql-apt-config.gpg] http://repo.mysql.com/apt/ubuntu/ jammy mysql-tools
#deb [signed-by=/usr/share/keyrings/mysql-apt-config.gpg] http://repo.mysql.com/apt/ubuntu/ jammy mysql-tools-preview
deb-src [signed-by=/usr/share/keyrings/mysql-apt-config.gpg] http://repo.mysql.com/apt/ubuntu/ jammy mysql-8.0
Как видите, ключ хранится в /usr/share/keyrings/mysql-apt-config.gp
. На этом этапе вы можете скачать новый ключ в нужное место
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys [OFFENDING KEY] && rm /usr/share/keyrings/mysql-apt-config.gpg && gpg --output /usr/share/keyrings/mysql-apt-config.gpg --export [OFFENDING KEY]
в конечном итоге оставляя часть rm /usr/share/keyrings/mysql-apt-config.gpg
, если у вас нет ключа
Ответ или решение
Чтобы исправить ошибку GPG "NO_PUBKEY", которая возникает при добавлении дополнительных репозиториев в Ubuntu, выполните следующие шаги. Эта ошибка указывает на то, что для подписания репозитория отсутствует нужный публичный ключ. В этой статье мы рассмотрим несколько методов решения данной проблемы, в том числе с использованием графического интерfacа, если вы предпочитаете избегать командной строки.
1. Понимание проблемы
Ошибка GPG "NO_PUBKEY" обычно возникает при выполнении команды обновления (например, apt-get update
), когда один из добавленных репозиториев не может быть проверен из-за отсутствия его публичного ключа. В вашем случае сообщение об ошибке указывает следующий ключ: 8BAF9A6F
.
2. Решение через терминал
Если вы все же готовы воспользоваться терминалом, один из самых простых способов исправить эту ошибку — получить и импортировать недостающий ключ. Выполните следующие команды:
-
Откройте терминал.
-
Получите недостающий ключ с помощью команды:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8BAF9A6F
-
Обновите список пакетов:
sudo apt-get update
Если эта команда не работает, вы можете использовать альтернативный способ:
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 8BAF9A6F
gpg --export --armor 8BAF9A6F | sudo apt-key add -
sudo apt-get update
3. Решение с использованием графического интерфейса
Если вы хотите избежать командной строки, есть несколько опций, которые позволяют работать через графический интерфейс:
Способ 1: Y-PPA-Manager
-
Установите Y-PPA-Manager (предварительно добавив PPA):
sudo add-apt-repository ppa:webupd8team/y-ppa-manager sudo apt-get update sudo apt-get install y-ppa-manager
-
Запустите Y-PPA-Manager, введя
y-ppa-manager
в терминале или найдите его в меню приложений. -
В главном окне выберите "Advanced".
-
Найдите опцию "Try to import all missing GPG keys" и нажмите OK. Программа попытается импортировать все недостающие ключи.
Способ 2: Импорт ключа через Software Sources
- Перейдите в "Программы" > "Центр программного обеспечения".
- Нажмите "Правка" > "Источники программного обеспечения".
- Введите свой пароль для подтверждения.
- Перейдите на вкладку "Аутентификация" и нажмите "Импортировать файл ключа…".
- Найдите файл ключа, который вы сохранили, и нажмите "OK".
4. Мануальная загрузка ключа
Если вы знаете, где найти публичный ключ на сайте репозитория, вы можете:
- Скопировать блок ключа, который начинается с
-----BEGIN PGP PUBLIC KEY BLOCK-----
и заканчивается-----END PGP PUBLIC KEY BLOCK-----
. - Сохранить его в текстовый файл на рабочем столе.
- Воспользоваться графическим методом импорта, который описан выше.
5. Завершение
После выполнения любого из указанных методов не забудьте снова запустить:
sudo apt-get update
Это обновит информацию о пакетах, и ошибка GPG "NO_PUBKEY" должна исчезнуть.
Заключение
Исправление ошибки GPG "NO_PUBKEY" является важной задачей для обеспечения нормальной работы вашей системы. Мы рассмотрели основные методы решения этой проблемы как через терминал, так и с использованием графического интерфейса. Помните, что всегда стоит удостовериться в надежности репозитория, прежде чем добавлять ключи безопасности, чтобы избежать возможных угроз безопасности.