Skip to content

Импорт недостающих ключей в Ubuntu 22.04+

Команда:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys `sudo apt-get update 2>&1 | grep -o '[0-9A-Z]{16}$' | xargs`

используется для автоматического обновления (импорта) недостающих GPG-ключей пакетных репозиториев при выполнении apt update. Однако эта команда устарела, так как apt-key больше не рекомендуется к использованию в новых версиях Ubuntu и Debian.


Почему apt-key устарел?

Использование apt-key добавляет GPG-ключи глобально на систему, что потенциально небезопасно. Вместо этого рекомендуется хранить ключи локально (в /etc/apt/trusted.gpg.d/) и указывать их в файлах источников с помощью опции signed-by.


Актуальное решение

В новых версиях Ubuntu (начиная примерно с 20.04 и особенно в 22.04+), вместо apt-key, следует использовать gpg напрямую и управлять ключами через отдельные файлы в /etc/apt/trusted.gpg.d/.

Но если вам нужно автоматически импортировать недостающие GPG-ключи, можно использовать следующий подход:

🛠 Современная замена вашей команды:

sudo apt update 2>&1 | grep -i 'no_pubkey' | awk '{print $NF}' | xargs -I {} sudo gpg --keyserver keyserver.ubuntu.com --recv-keys {} && \
sudo gpg --export > /etc/apt/trusted.gpg

⚠️ Это временный workaround — лучше не использовать глобальный trusted.gpg, а добавлять ключи отдельно под каждый репозиторий.


✅ Рекомендуемый способ: использование signed-by в sources.list.d

Пример:

  1. Скачайте GPG-ключ:

bash curl -fsSL https://example.com/repo-key.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/example-archive-keyring.gpg > /dev/null

  1. Добавьте источник с указанием ключа:

bash echo "deb [signed-by=/usr/share/keyrings/example-archive-keyring.gpg] http://example.com/repo focal main" | sudo tee /etc/apt/sources.list.d/example.list

  1. Обновите:

bash sudo apt update


🔁 Если всё же хочется "одной командой" обновить все ключи

Вы можете использовать этот скрипт:

# Извлекаем недостающие ключи
KEYS=$(sudo apt update 2>&1 | grep -i 'no_pubkey' | awk '{print $NF}' | sort -u)

# Если есть недостающие ключи — загружаем их
if [ -n "$KEYS" ]; then
  sudo gpg --keyserver keyserver.ubuntu.com --recv-keys $KEYS
  sudo gpg --export > /etc/apt/trusted.gpg
fi

❗Повторюсь: это не рекомендуемый способ, но работает в большинстве случаев, когда нужно быстро решить проблему с недостающими ключами.