Как я могу управлять файлами набора ключей в 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 относительно использования.asc
extension, вот как я закончил добавление репозитория для 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