Предупреждение: apt-key устарел. Вместо этого управляйте файлами связки ключей в trust.gpg.d

Я устанавливал elasticsearch, следуя этому руководству, но на самом деле elasticsearch не является частью этого вопроса.

На первом этапе мне нужно добавить ключ:

      wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

и получил следующее сообщение:

      Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).

Процесс установки прошел нормально, но, поскольку он устарел, я ищу новое использование, которое заменит. (У меня нет проблем с установкой пакета.) man apt-key Я видел

В последний раз apt-key (8) будет доступен в Debian 11 и Ubuntu 22.04.

...

Поэтому файлы двоичных ключей, предназначенные для использования с любой версией apt, всегда следует создавать с помощью gpg --export.

но он не сказал альтернативу apt-key add. Я пытался

      wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --export

но не сработало. Итак, что я использую после трубы wget когда apt-key удален?

11 ответов

Добавление ключа небезопасно , поскольку добавляется ключ для всех репозиториев. Именно поэтому apt-key пришлось устареть.

Укороченная версия

Делайте то , что делает Сигнал . Если вы хотите использовать ключ at для репозитория, указанного в /etc/apt/sources.list.d/EXAMPLE.list, использовать:

      wget -O- https://example.com/EXAMPLE.gpg |\
    gpg --dearmor > /usr/share/keyrings/EXAMPLE.gpg

echo "deb [signed-by=/usr/share/keyrings/EXAMPLE.gpg] https://example.com/apt stable main" |\
    sudo tee /etc/apt/sources.list.d/EXAMPLE.list

# Optional (you can find the email address / ID using `apt-key list`)
sudo apt-key del support@example.com

Длинная версия

Хотя уведомление об устаревании рекомендует добавить ключ в , это небезопасное решение. Чтобы процитировать :

Причина этого изменения заключается в том, что при добавлении ключа OpenPGP, который используется для подписи репозитория APT в или , этот ключ безоговорочно доверяется APT во всех других репозиториях, настроенных в системе, которые не имеют signed-by(см. ниже), даже в официальных репозиториях Debian/Ubuntu. В результате любой неофициальный репозиторий APT, в который добавлен ключ подписи, /etc/apt/trusted.gpgили же /etc/apt/trusted.gpg.dможет заменить любой пакет в системе. Так что это изменение было сделано из соображений безопасности (вашей безопасности).

Правильное решение объясняется в эту статью из Linux Uprisingэтой статье Linux Uprising и в : Храните ключ в /usr/share/keyrings/, а затем сослаться на ключ в списке подходящих источников.

Таким образом, соответствующий метод выглядит следующим образом:

  1. Скачайте ключ с https://example.com/EXAMPLE.gpgи сохранить его в /usr/share/keyrings/EXAMPLE.gpg. Вики Debian WikiDebian объясняет, что вы должны удалить ключ (т.е. преобразовать его из base64 в двоичный) для совместимости со старым программным обеспечением.
            wget -O- https://example.com/EXAMPLE.gpg |\
        gpg --dearmor > /usr/share/keyrings/EXAMPLE.gpg
    
  2. Добавьте ключ в исходный файл, который используется репозиторием. Найдите нужный файл в /etc/apt/sources.list.d/и отредактируйте его так, чтобы он был связан с только что добавленным брелоком. Если файл не существует, вы можете его создать. В итоге это должно выглядеть примерно так:
            deb [signed-by=/usr/share/keyrings/EXAMPLE.gpg] https://example.com/apt stable main
    
  3. Удалите ключ из apt-key, если он был добавлен ранее. Бежать sudo apt-key listчтобы перечислить все ключи, и найти тот, который был ранее добавлен. Используя адрес электронной почты ключа или отпечаток пальца, запустите sudo apt-key del support@example.com.

ответ найден здесь: https://suay.site/?p=526

вкратце: получить ключ локально

      curl -s URL

добавить ключ:

      cat URL.pub | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/NAME.gpg --import

авторизуем пользователя _apt:

      sudo chown _apt /etc/apt/trusted.gpg.d/NAME.gpg

Как упоминалось в текущем принятом ответе , добавление ключа в /etc/apt/trusted.gpg.d небезопасно, поскольку оно добавляет ключ для всех репозиториев. Вот почему apt-key выдает это предупреждение.

Вы можете использовать более простое решение, например следующее:

      curl -fsSL https://example.com/EXAMPLE.gpg | sudo gpg --dearmor -o /usr/share/keyrings/EXAMPLE.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/EXAMPLE.gpg] \
 https://example.com/apt stable main" \
| sudo tee -a /etc/apt/sources.list.d/EXAMPLE.list > /dev/null

sudo apt update
sudo apt install <package-name>

Отman apt-key(Убунту 22.04)

Если ваше существующее использование apt-key add выглядит следующим образом:

wget -qO- https://myrepo.example/myrepo.asc | sudo apt-key add -

Затем вы можете напрямую заменить это на (хотя обратите внимание на рекомендацию ниже):

wget -qO- https://myrepo.example/myrepo.asc | sudo tee /etc/apt/trusted.gpg.d/myrepo.asc

В MX Linux есть служебный скрипт под названием «MX Fix GPG keys», который позаботится об этом. Поскольку это всего лишь сценарий bash, он, скорее всего, отлично работает с любым другим дистрибутивом на основе Debian.

Это здесь https://github.com/MX-Linux/checkaptgpg

Я столкнулся с проблемой устаревания и предупреждениями при добавлении репозитория kubernetes-xenial с использованием ключа gpg, доступного в Интернете. Я работал в среде Ubuntu 22.04.1 на Apple Silicon (M1/aarch64/arm64). Решение, представленное ниже, очень похоже на решение, предложенное Вамси Нереллой в другом месте этой темы, но оно включает явный пример, а также создание нового каталога ключей ('/etc/apt/keyrings').

Это решение также позволяет избежать любого использования каталога ключей «/etc/apt/trusted.gpg.d», который, по словам некоторых источников, не решает проблему, которая изначально привела к прекращению поддержки.

Хотя пакеты, добавленные в конце этого примера, были из Kubernetes, этот подход должен работать одинаково хорошо с другими пакетами, как обсуждал Вамси.

Это решение также очень похоже на решение, предложенное Промисом Престоном (см. ветку), но оно включает в себя ссылку на архитектуру системы, которая мне нужна для моего приложения. Возможно, этот пример принесет пользу другим.

Вместо этого:

Создайте файл kubernetes.list с помощью текстового редактора, например vim или nano:

      sudo vim /etc/apt/sources.list.d/kubernetes.list

Добавьте в новый файл следующий текст:

      deb http://apt.kubernetes.io/ kubernetes-xenial main

Загрузите ключ gpg и используйте устаревшийapt-keyчтобы включить использование нового репо:

      sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
sudo apt-get update
sudo apt-get install kubeadm kubelet kubectl

Использовать это:

      sudo mkdir -p /etc/apt/keyrings

sudo curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes.gpg
     
sudo echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/etc/apt/keyrings/kubernetes.gpg] \
  http://apt.kubernetes.io/ kubernetes-xenial main" \
  | sudo tee /etc/apt/sources.list.d/kubernetes.list > /dev/null

sudo apt-get update
sudo apt-get install kubeadm kubelet kubectl

Если вам нужна конкретная версия пакетов Kubernetes, например 1.26 (а не последняя), вы можете сделать это на последнем шаге:

      sudo apt-get install -y kubelet=1.26.0-00 kubeadm=1.26.0-00 kubectl=1.26.0-00

Как упоминалось ранее, вы можете заменить ключ, использованный в этом примере, другим ключом (https://packages.cloud.google.com/apt/doc/apt-key.gpg). Выбор «kubernetes.gpg» в удаленном ключе был произвольным.

Использованная литература:

Я получил его предупреждение при попытке установить nodejs и npm в Ubuntu 20.04.

Чтобы быть более точным:

Вместо этого:

      curl -sSL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \

Использовать это:

      curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarn.gpg >/dev/null \
echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \

Итак, полный скрипт установки выглядел так:

      apt-get install -y nodejs \
apt-get install -y npm gnupg2 \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarn.gpg >/dev/null \
echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \

Еще один фрагмент кода, решающий проблему с использованием обновленного формата deb822:

      { echo 'Types: deb'
  echo 'URIs: https://dl.k6.io/deb'
  echo 'Suites: stable'
  echo 'Components: main'
  echo 'Signed-By:'
  set -eo pipefail
  KEY=C5AD17C747E3415A3642D57D77C6C491D6AC1D69
  curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x$KEY" \
    | sed -e 's/^$/./g;s/^/ /g' 
} | sudo tee /etc/apt/sources.list.d/k6.sources

sudo apt-get update && sudo apt-get install k6

В данном случае я устанавливаю интерфейс командной строки k6.io на Ubuntu 22.04 LTS. Адаптируйте, как считаете нужным.

Обратите внимание на.sources- нет.list!

Преимущество deb822 заключается в том, что публичный ключ для подписи пакета встраивается в исходный файл (и проверяет только пакеты этого репозитория, что более безопасно, чем доверять ему все остальные репозитории ) .
Быть встроенным в файл сохраняет другой| sudo teeобруч:

      Types: deb
URIs: https://dl.k6.io/deb
Suites: stable
Components: main
Signed-By:
 -----BEGIN PGP PUBLIC KEY BLOCK-----
 Version: Hockeypuck 2.1.0-189-g15ebf24
 Comment: Hostname: 
 .
 xsFNBGBLRGQBEADCqEcl4YKYLAW8p/rEzBrDLi8fewyqPTLFWosWeu1a4fKzPcW8
 ggl/pjRcXxAxgCt1EhX9bjOrzavdnfnKLYuNkwR0vLWZtNEhAsOovsDzFF6n+WsN
 jtxL9nBZZ/7tgImxMUds8EXotx3R0Le5kbW0QWaWK8NDNayUChGF4ijM1dcacefA
 1ObrQvEKMybdFMxQM+oQjLeIe8TARaoATeLXh/LprNHqDWSAqE3KogChAMykp10i
...

Пришлось накрутить вышесказанное, потому что их официальные инструкции в очередной раз были нарушены .

Быстрый способ исправить это для пользователей Linux с пользовательским интерфейсом:

  1. Найдите PPA и сделайтеsudo add-apt-repository ppa:[MY_PPA](новый PPA со связкой ключей добавляется автоматически и обновляется)

  2. sudo apt update

  3. Перейдите в «Источники программного обеспечения -> PPA» и удалите старый PPA (убедитесь, что новые были добавлены правильно с помощью набора ключей).

Недавно столкнулся с этой ошибкой при попытке установить Jenkins на моем экземпляре EC2. Тем не менее, я смог решить эту проблему, выполнив следующие действия:

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

"wget ​​-q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key |sudo gpg --dearmor -o /usr/share/keyrings/jenkins.gpg"

Возможно, вам придется заменить jenkins пакетом/программным обеспечением, которое вы хотите установить.

  1. Прикрепите адрес репозитория пакетов Debian к серверу sources.list, выполнив:

"sudo sh -c 'echo deb [signed-by=/usr/share/keyrings/jenkins.gpg] http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d /jenkins.list'"

  1. Бегать:

"удачное обновление"

Таким образом, apt будет использовать только что созданный репозиторий.

  1. Перейдите к попытке/повторной попытке установки.

Надеюсь это поможет :). Источник: https://www.digitalocean.com/community/tutorials/how-to-install-jenkins-on-ubuntu-22-04.

Это также происходит при плохом соединении, просто невозможном соединении через порт, используемый для загрузки, а точнее: порт 80.

      sudo ufw allow port 80

затем повторите попытку, некоторым это может помочь.

Другие вопросы по тегам