Если APT сообщает «Не удалось проверить следующие подписи», укажите репозиторий и конкретный код ошибки в том же выводе, затем восстановите доверенный ключ подписи этого репозитория или запись в исходном коде. Для стороннего репозитория получите его текущий ключ от издателя программного обеспечения и привяжите его к этому источнику с помощью Signed-By; не отключайте проверку подписи и не добавляйте неизвестный ключ глобально.
Пример вывода команды `apt update`: ошибка отсутствия ключа указывает на затронутый репозиторий и содержит идентификатор NO_PUBKEY.
1. Найдите репозиторий и прочтите точное сообщение об ошибке.
Выполните обновление, чтобы просмотреть полное сообщение:
sudo apt update
Найдите URL-адрес рядом с Err:и токен, например NO_PUBKEY, EXPKEYSIG, , KEYEXPIRED, или BADSIG. URL-адрес указывает, какой источник не прошел проверку; токен сужает круг поиска, указывая на причину. APT проверяет подписанные метаданные репозитория, прежде чем доверять индексу пакетов, поэтому неудачная проверка подписи является сигналом безопасности, а не просто предупреждением. В установках Ubuntu уже есть ключи для архивов Ubuntu по умолчанию; ручная настройка ключей обычно требуется только для репозиториев, добавленных позже.
Найдите определение источника, выполнив поиск хоста, указанного в сообщении об ошибке. Замените указанный в примере хост на тот, который вы видите в терминале:
Найдите в исходном каталоге APT точный хост, указанный в результате неудачного обновления.
В Ubuntu 24.04 и более поздних версиях по умолчанию используются исходные файлы deb822, заканчивающиеся на .sources; в более старых установках часто встречаются .listфайлы, состоящие из одной строки. Проверьте URL-адрес репозитория, кодовое имя пакета или Ubuntu, а также любые существующие Signed-Byзаписи. Если источник указывает на релиз, который поставщик больше не поддерживает, используйте инструкции поставщика для вашего релиза Ubuntu или отключите этот источник. Ключ не может исправить устаревший или некорректный путь к репозиторию.
2. Ремонт отсутствующего или повернутого ключа стороннего производителя.
Для NO_PUBKEYначала убедитесь, что вы установили именно тот репозиторий, который указали намеренно. Откройте текущую документацию по установке от издателя и получите URL-адрес ключа подписи и полный отпечаток из этого источника. Сравните отпечаток с отдельно опубликованным справочником поставщика, если он доступен. Не получайте ключ со случайного сервера ключей только потому, что его короткий идентификатор совпадает с ошибкой.
Для поставщиков, публикующих .ascключи в формате ASCII, установите их в качестве выделенного хранилища ключей APT. Замените пример URL-адреса на точный URL-адрес, указанный в документации данного издателя:
Файл .gpgдолжен быть доступен для чтения непривилегированному пользователю APT, осуществляющему загрузку. Если издатель предоставляет бинарный .gpgнабор ключей, следуйте его инструкциям, а не удаляйте его заново. Ubuntu рекомендует хранить ключи сторонних разработчиков в отдельном наборе ключей и ссылаться на него через этот репозиторий, ограничивая круг источников, которые могут использовать этот ключ.
Параметр Signed-By, специфичный для каждого источника, позволяет привязать репозиторий к собственному связке ключей.
Отредактируйте существующее определение источника, а не добавляйте дублирующуюся запись. Для файла deb822, например /etc/apt/sources.list.d/vendor.sources, используйте фактические значения URI, набора инструментов и компонентов поставщика, а затем добавьте путь к связке ключей:
Types: deb
URIs: https://packages.example.org/ubuntu
Suites: YOUR_UBUNTU_CODENAME
Components: main
Signed-By: /etc/apt/keyrings/vendor-archive.gpg
Если существующая запись находится в файле, состоящем из одной строки .list, эквивалентный синтаксис выглядит так deb [signed-by=/etc/apt/keyrings/vendor-archive.gpg] https://packages.example.org/ubuntu YOUR_UBUNTU_CODENAME main: . Сохраните документированный набор инструментов и компонентов репозитория; приведенные примеры значений являются заполнителями. Избегайте apt-key add: это устаревший подход, а глобальный доверенный ключ может предоставить ключу третьей стороны более широкие полномочия, чем предполагалось.
Если в сообщении указано EXPKEYSIGили KEYEXPIRED, возможно, срок действия ключа подписи истек или поставщик его обновил. Загрузите и проверьте новый ключ, используя текущие инструкции поставщика, затем обновите хранилище ключей источника. Не продлевайте срок действия старого ключа, игнорируя истечение его срока.
3. Проверьте проблемы со временем, архивом Ubuntu и зеркалами.
Если репозиторий является официальным архивом Ubuntu, не импортируйте ключ стороннего разработчика. Убедитесь, что системное время установлено правильно с помощью команды `npm install` timedatectl status, и подтвердите, что источник использует действительный URL-адрес архива Ubuntu и кодовое имя установленного вами релиза. Пакет ubuntu-keyringпредоставляет ключи подписи архивов Ubuntu; если управление пакетами по-прежнему работает через доверенный источник Ubuntu, обновите этот пакет с помощью команды `npm update`:
sudo apt install --reinstall ubuntu-keyring
Сообщение BADSIGозначает, что подпись не соответствует метаданным, полученным APT. Повторный импорт ключа обычно является неправильным ответом. Проверьте наличие неправильного системного времени, устаревшего или несогласованного зеркала, кэширующего прокси или проблемы с публикацией на стороне репозитория; повторите попытку после устранения причины. Если не работает только сторонний источник, и он вам не нужен, отключите его конкретную запись .sources, .listпока связываетесь с его сопровождающим. Оставьте проверку безопасности включенной.
4. Проверьте правильность исправления.
После исправления источника или связки ключей повторно запустите команду `apt update` и убедитесь, что ошибок подписи больше нет.
Запустите sudo apt updateеще раз. Восстановление считается завершенным, когда затронутый репозиторий загружен без предупреждения о подписи, и APT достигает точки доступа Reading package lists... Done. Успешное обновление не подтверждает безопасность стороннего издателя; оно подтверждает, что подпись метаданных соответствует ключу, которому вы доверились. Если проверка по-прежнему не удается, перепроверьте URL-адрес репозитория, кодовое имя, отпечаток ключа, разрешения связки ключей и точный токен ошибки, прежде чем вносить какие-либо изменения.