Ошибка NO_PUBKEY возникает при обновлении системы через apt, если пакетный менеджер не может проверить подпись репозитория из-за отсутствующего GPG ключа. Эта статья поможет системным администраторам и пользователям Linux быстро исправить проблему и добавить необходимые ключи.
Почему появляется ошибка NO_PUBKEY
- Ключ GPG репозитория не был импортирован в систему, либо был удалён.
- Репозиторий обновил свой ключ, а старый устарел или был аннулирован.
- Настройки источников пакетов содержат репозиторий с неподписанным или недействительным ключом.
- Проблемы с сетью или некорректная загрузка ключа из-за временной недоступности сервера.
Пошаговое решение
- Определяем отсутствующий ключ
Запустите обновление пакетов для выявления ошибки и получения номера ключа:sudo apt updateВывод будет содержать строку вида:
NO_PUBKEY
Запишите— это 16-значный идентификатор (например, 3B4FE6ACC0B21F32). - Добавляем отсутствующий ключ через apt-key
Этот метод подходит для Debian/Ubuntu и производных:sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keysКоманда скачает и добавит ключ из стандартного сервера. В выводе должно быть сообщение об успешном добавлении ключа.
Примечание: В новых версиях apt-key помечен как устаревший, но пока работает.
- Добавляем ключ напрямую с помощью curl и apt-key add
Если предыдущий способ не подошёл, попробуйте скачать ключ вручную:curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x" | sudo apt-key add -Этот вариант получает ключ через HTTP и добавляет его в систему.
- Для новых версий Ubuntu/Debian: импорт ключа в trusted.gpg.d
apt-key устарел, рекомендуется добавлять ключи в отдельный файл:curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x" | sudo gpg --dearmor -o /usr/share/keyrings/.gpgПосле этого нужно отредактировать файл репозитория (обычно в /etc/apt/sources.list.d/), чтобы добавить:
deb [signed-by=/usr/share/keyrings/.gpg] http://адрес-репозитория дистрибутив компонентыТак apt будет использовать конкретный ключ для проверки.
- Обновляем список пакетов
После добавления ключа обновляем информацию о пакетах:sudo apt updateЕсли ошибка исчезла — ключ установлен верно.
Альтернативные методы
- Добавление ключа с помощью apt-key adv и другого сервера
Можно попробовать альтернативные keyserver, если ubuntu.com недоступен:sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-keys - Использование команды gpg для импорта ключа вручную
Скачайте ключ в файл и затем импортируйте:wget -qO - "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x" > keyfile.asc sudo gpg --dearmor keyfile.asc sudo mv keyfile.asc.gpg /usr/share/keyrings/.gpg rm keyfile.ascПосле чего укажите файл ключа в настройках репозитория (описано выше).
Проверка результата
После добавления ключа и обновления пакетов убедитесь, что ошибка больше не появляется:
sudo apt updateЕсли вывод не содержит ошибок связанных с NO_PUBKEY или подписью, значит проблема решена.
Как избежать в будущем
- При добавлении новых репозиториев сразу импортируйте их GPG ключи.
- Регулярно проверяйте актуальность ключей и обновляйте их при необходимости.
- Используйте официальные зеркала и проверенные источники.
- Для автоматизации используйте скрипты или инструменты управления конфигурациями (Ansible, Puppet и др.).
FAQ
Почему apt-key устарел?
Утилита apt-key считается устаревшей из-за соображений безопасности и рекомендуют использовать хранение ключей в /usr/share/keyrings/ с указанием signed-by.
Как узнать, какой ключ нужно добавить?
Это видно в сообщении ошибки NO_PUBKEY в выводе sudo apt update.
Можно ли пропустить проверку ключа?
Технично можно, но это сильно снижает безопасность, и делать это не рекомендуется.
Смотрите также: Настройка репозиториев и добавление ключей в Linux