Импорт недостающих ключей в 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
Пример:
- Скачайте GPG-ключ:
bash
curl -fsSL https://example.com/repo-key.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/example-archive-keyring.gpg > /dev/null
- Добавьте источник с указанием ключа:
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
- Обновите:
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
❗Повторюсь: это не рекомендуемый способ, но работает в большинстве случаев, когда нужно быстро решить проблему с недостающими ключами.