Как обойти "вывод ключа apt не должен анализироваться"?

Я автоматизирую установку Docker. Что-то вроде этого:

if apt-key fingerprint 0EBFCD88 | grep "Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88" > /dev/null
then
  # proceed
fi

Это работало нормально в старых версиях apt-key, но последние версии имеют две проблемы:

  1. Другой формат вывода: я могу взломать
  2. Предупреждение:

    Warning: apt-key output should not be parsed (stdout is not a terminal)
    

Ясно, что я могу взломать это, просто перенаправить stderr в /dev/null, Это просто сделало меня любопытным:

Как эти замечательные люди предлагают мне проверить свои ключевые отпечатки пальцев? Или я в корне ошибаюсь, желая автоматизировать это, это победит? (Думаю, что нет, поскольку я все еще вручную снял ожидаемый отпечаток с веб-сайта, но не стесняйтесь сказать мне иначе...)

5 ответов

Решение

Из источников apt-key вы можете установить APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE в непустое значение, чтобы отключить это предупреждение.

Вы также можете использовать "grep -q", чтобы вам не нужно было перенаправлять стандартный вывод в /dev/null или.

Чтобы ответить на часть "я понимаю это в корне неправильно":

Я верю, что, возможно, да. Это причина предупреждения.

Вы не пишете, что именно делаете, но одна вещь, которую нужно понять, это:

Срок действия ключей истекает, поэтому через некоторое время отпечаток в вашем скрипте устареет и, возможно, он больше не будет работать так, как ожидалось.

После того, как хранилище и его ключ установлены, система каким-то образом обновляет ключ автоматически, но при первоначальном добавлении хранилища необходимо предоставить обновленный ключ. В моих сценариях, автоматизирующих установку, я не проверяю, был ли ключ уже добавлен, но я проверяю, был ли репозиторий уже добавлен. Если хранилище не было добавлено, я добавляю его вместе с обновленным ключом, который я всегда загружаю с его URL.

Я изменяю саму команду, чтобы использовать пакетный режим, чтобы она не жаловалась на стандартный вывод. Для большего apt-ключа это будет работать, быстро протестировано на Debian:

sed -i "s%{GPG_EXE}\")' --%{GPG_EXE}\")' --batch --%g" /usr/bin/apt-key

Хотя для меньшего apt-ключа это может сработать (не проверено, так как я не могу точно вспомнить, где я видел этот более простой вариант):

sed -i 's%GPG_CMD="gpg %GPG_CMD="gpg --batch %g' /usr/bin/apt-key

Вам нужны привилегии для записи в /usr/bin/apt-key, поэтому либо работайте от имени пользователя root, либо используйте sudo

Это работает

      apt-key exportall > test.key 2>/dev/null

или же

      apt-key exportall 2>&1 | grep -v '^Warning' > test.key

Или также вы можете сделать так

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

вместо

      RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
Другие вопросы по тегам