Как я могу управлять файлами набора ключей в trust.gpg.d с помощью ansible playbook, поскольку apt-key устарел?

До того, как он устарел, я использовал Ansible playbooks для добавления и обновления ключей на своих серверах. На данный момент больше не обновляет ключи. В нескольких поисках я обнаружил, что мне нужно использовать сейчас. Однако у меня много серверов, и я не хочу делать это вручную для каждого из них. Есть ли способ управлять моими связками ключей с помощью gpgс Ансибл?

Вот мои задачи Ansible с устаревшими apt-key:

      - apt_key:
  url: "https://packages.treasuredata.com/GPG-KEY-td-agent"
  state: present

- apt_repository:
  repo: "deb http://packages.treasuredata.com/3/ubuntu/{{ ansible_distribution_release }}/ {{ ansible_distribution_release }} contrib"
  state: present
  filename: "treasure-data" # Name of the pre-compiled fluentd-agent

Я старался apt-key updateно это не работает для меня. Если ключ уже существует, но срок его действия истек, он больше не обновляется.

3 ответа

Короче говоря, вам нужно поместить ключи GPG в современном формате в отдельную папку, которая не ищется по умолчанию, и указать на нее конфигурацию вашего репозитория.

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

Вы можете проверить, используете ли вы старый формат ASCII GPG или более новый двоичный формат GPG через:

      # file elastic-old.gpg
elastic-old.gpg: PGP public key block Public-Key (old)

# file elastic.gpg    
elastic.gpg: PGP/GPG key public ring (v4) created Mon Sep 16 17:07:54 2013 RSA (Encrypt or Sign) 2048 bits MPI=0xd70ed6cd267c5b3e...

Если ваш ключ старого формата, вам нужно будет снять с него броню черезgpg --dearmor elastic.gpgв новый двоичный формат.

В Ubuntu 22.04 есть папка, которую вы должны использовать, но она не загружена заранее./etc/apt/keyrings- или вы можете создать свой собственный каталог и использовать его.

Что касается части Ansible, вы можете использоватьget_urlилиfileвставить ключ GPG современного формата в систему, а затем использоватьapt_repositoryкак и раньше, чтобы добавить репо, с добавлением указания набора ключей.

      - name: Add Example GPG key
  ansible.builtin.get_url:
    url: https://example.com/example.gpg
    dest: /etc/apt/keyrings/example.asc
    mode: '0644'
    force: true

- name: Add Example repo
  ansible.builtin.apt_repository:
    filename: example-repo
    repo: 'deb [signed-by=/etc/apt/keyrings/example.asc] https://example.com/packages/8.x/apt stable main'

Чтобы немного расширить комментарий @geerlingguy относительно использования.ascextension, вот как я закончил добавление репозитория для Telegraf. Обратите внимание на использованиеinfluxdb.ascв обоихget_urlиapt_repositoryзадания.

      - name: Install InfluxDB key
  get_url:
    url:  https://repos.influxdata.com/influxdb.key
    dest: /etc/apt/trusted.gpg.d/influxdb.asc

- name:  Add InfluxDB repository
  apt_repository:
    repo:  "deb [signed-by=/etc/apt/trusted.gpg.d/influxdb.asc] https://repos.influxdata.com/debian stable main"
    state: present
    update_cache: yes

- name:  Install telegraf
  package:
    name:  telegraf
    state: present

Вы можете полностью обойтиgpg --dearmorшаг с этим методом.

Создал взлет вышеуказанного содержимого, в котором используется set_fact. Упрощает копирование/вставку для других нужд, используя тот же код.

Поставьте 3 вары и все готово. Я вставил префикс sm- только для того, чтобы ясно видеть, что мой сценарий поместил их туда, а не какой-либо другой процесс.

      - set_fact:
     repoid: nginx
     repo_key_url: https://nginx.org/keys/nginx_signing.key
     repo_sources_list_url: "http://nginx.org/packages/ubuntu {{ os_release_name }} nginx"

- name: nginx repo - add gpg key as asc so apparmor fix not needed
  get_url:
    url: "{{ repo_key_url }}"
    dest: /etc/apt/keyrings/sm-{{ repoid }}.asc
    mode: '0644'
    force: true

- name: nginx repo - add to sources.list.d 
  apt_repository:
    filename: sm-{{repoid}}-repository
    repo: 'deb [signed-by=/etc/apt/keyrings/sm-{{ repoid }}.asc] {{ repo_sources_list_url }}'
    state: present
Другие вопросы по тегам