#Что означает ошибка
NO_PUBKEY
APT проверяет подпись каждого репозитория. Если ключа нет в связке (keyring) или он истёк, apt update выводит The following signatures couldn't be verified because the public key is not available: NO_PUBKEY XXXXXXXXXXXXXXXX. Репозиторий при этом отключается. В Debian 12 и Ubuntu 22.04+ рекомендуется хранить ключи в /etc/apt/keyrings/ и привязывать их к репозиторию через signed-by.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет ключаКлюч репозитория не установлен. | В сообщении NO_PUBKEY. | Скачайте и добавьте ключ. |
| Устаревший apt-keyСтарый способ добавления не работает. | apt-key пишет deprecated. | Используйте signed-by. |
| Сменился ключРепозиторий обновил ключ, а у вас старый. | Ошибка EXPKEYSIG после ранее рабочего. | Скачайте новый ключ. |
| Неверный источникОпечатка в URL или ветка устарела. | 404, Release file отсутствует. | Исправьте sources.list. |
#Пошаговое решение
- Запомните идентификатор ключаВ терминале выполните
sudo apt updateи запишите URL источника, для которого написаноNO_PUBKEY, и идентификатор отсутствующего ключа. Сравните полный отпечаток предлагаемого издателем ключа с его официальной документацией. Не загружайте ключ с произвольного сервера только по короткому ID: идентификатор не удостоверяет принадлежность ключа. Если источник больше не используется, лучше безопасно отключить его. - Найдите официальный источник недостающего ключаПосле
sudo apt updateзапишите точный адрес репозитория и идентификатор из NO_PUBKEY. Откройте только официальный сайт издателя этого репозитория и найдите руководство для вашей версии Debian/Ubuntu. Сравните полный отпечаток ключа с публикацией самого издателя: короткого идентификатора из сообщения недостаточно, чтобы признать произвольный ключ доверенным. - Сохраните проверенный ключ в отдельный файлТолько после сверки отпечатка скачайте официальный ключ издателя в домашнюю папку обычным браузером или командой, указанной его документацией. Формат файла может быть
.asc(текстовый ключ) либо.gpg(двоичный). Если издатель предоставляет именно текстовый.asc, установитеgnupgштатным способом и преобразуйте скачанный файл командойgpg --dearmor -o repo.gpg repo.ascиз каталога загрузки. Затем с правами администратора перенеситеrepo.gpgв/etc/apt/keyrings/, предварительно проверив его отпечаток; не запускайтеcurl URL | sudo ...с непроверенным адресом. - Привяжите ключ только к конкретному репозиториюСделайте резервную копию файла источника в
/etc/apt/sources.list.d/. Для записи формата.listукажите послеdebпараметр[signed-by=/etc/apt/keyrings/repo.gpg], подставляя фактическое имя проверенного файла. Для.sourcesиспользуйте полеSigned-By: /etc/apt/keyrings/repo.gpg. Сохраняйте остальные поля адреса, выпуска и компонентов без изменений; не переписывайте системные источники Debian ради стороннего ключа. Если сомневаетесь в синтаксисе, остановитесь и сверяйтесь с инструкцией поставщика. - Не получайте ключ с произвольного сервераСерверы ключей предоставляют ключ по идентификатору, но сами по себе не доказывают его принадлежность издателю. Не используйте их как способ угадать правильный ключ. При отсутствии проверенной ссылки на официальном сайте отключите только сомнительный сторонний репозиторий, сохранив копию его настройки, и обратитесь к поставщику программного обеспечения.
- Обновите спискиПосле того как проверенный ключ репозитория установлен с привязкой
Signed-Byлибо ненужный источник отключён, в терминале Debian выполнитеsudo apt update. Убедитесь, что сообщениеNO_PUBKEYдля именно этого источника исчезло. Если ошибка повторяется, проверьте URL, права чтения ключа и корректность файла.list/.sources; не импортируйте ключ повторно из неизвестного сервера. - Удалите ненужный репозиторийЕсли сторонний репозиторий больше не нужен, найдите его строку по URL через
grep -Rв/etc/apt/sources.listи/etc/apt/sources.list.d/. Сохраните копию соответствующего.listили.sources, затем отключите только этот источник через комментарий#или штатный параметр Enabled: no для.sources. Выполнитеsudo apt updateи убедитесь, что ошибки нет. Не удаляйте системные репозитории Debian и не очищайте все ключи.
#Пример
deb [arch=amd64 signed-by=/etc/apt/keyrings/example.gpg] https://repo.example.com/debian bookworm maingrep -R -h -E "^(deb |URIs:|Signed-By:)" /etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/nullsudo apt updateЕсли ошибка касается официальных репозиториев Debian, установите пакет debian-archive-keyring (sudo apt install debian-archive-keyring) и обновите систему. Подробнее о безопасной настройке — .