ansible.builtin.apt_key 模块 – 添加或删除 apt 密钥

注意

此模块是 ansible-core 的一部分,包含在所有 Ansible 安装中。在大多数情况下,您可以使用简短的模块名称 apt_key,即使没有指定 collections 关键字。但是,我们建议您使用 完全限定的集合名称 (FQCN) ansible.builtin.apt_key,以便轻松链接到模块文档并避免与可能具有相同模块名称的其他集合发生冲突。

概要

  • 添加或删除 apt 密钥,可以选择下载它。

要求

以下要求是在执行此模块的主机上所需的。

  • gpg

参数

参数

注释

data

字符串

要添加到密钥环的密钥文件内容。

file

路径

远程服务器上要添加到密钥环的密钥文件的路径。

id

字符串

密钥的标识符。

包含此项允许检查模式正确报告更改的状态。

如果指定子密钥的 id,请注意 apt-key 不了解如何通过子密钥 id 删除密钥。请改为指定主密钥的 id。

state 设置为 absent 时,此参数是必需的。

keyring

路径

/etc/apt/trusted.gpg.d/ 中特定密钥环文件的完整路径。

keyserver

字符串

从中检索密钥的密钥服务器。

state

字符串

确保密钥存在(已添加)或不存在(已撤销)。

选择

  • "absent"

  • "present" ← (默认)

url

字符串

从中检索密钥的 URL。

validate_certs

布尔值

如果为 false,则不会验证目标 URL 的 SSL 证书。这仅应在使用自签名证书的个人控制的站点上使用。

选择

  • false

  • true ← (默认)

属性

属性

支持

描述

check_mode

支持: 完整

可以在检查模式下运行并返回更改状态预测,而无需修改目标,如果不受支持,则操作将被跳过。

diff_mode

支持:

将在差异模式下返回有关更改内容(或可能需要在检查模式下更改内容)的详细信息。

platform

平台: debian

可以针对其进行操作的目标操作系统/系列。

说明

注意

  • 此模块使用的 apt-key 命令已被弃用。有关详细信息,请参阅 Debian wiki。此模块保留用于仍然使用 apt-key 作为管理 apt 存储库密钥的主要方法的系统的向后兼容性。

  • 作为健全性检查,下载的密钥 id 必须与指定的 id 相匹配。

  • 使用完整指纹 (40 个字符) 密钥 id 来避免密钥冲突。要生成完整指纹的导入密钥:apt-key adv --list-public-keys --with-fingerprint --with-colons

  • 如果同时指定密钥 idurl 以及 state=present,则任务可以根据需要验证或添加密钥。

  • 添加新密钥需要更新 apt 缓存(例如,使用 ansible.builtin.apt 模块的 update_cache 选项)。

另请参阅

另请参阅

ansible.builtin.deb822_repository

添加和删除 deb822 格式的存储库。

示例

- name: One way to avoid apt_key once it is removed from your distro, armored keys should use .asc extension, binary should use .gpg
  block:
    - name: somerepo | no apt key
      ansible.builtin.get_url:
        url: https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x36a1d7869245c8950f966e92d8576a8ba88d21e9
        dest: /etc/apt/keyrings/myrepo.asc
        checksum: sha256:bb42f0db45d46bab5f9ec619e1a47360b94c27142e57aa71f7050d08672309e0

    - name: somerepo | apt source
      ansible.builtin.apt_repository:
        repo: "deb [arch=amd64 signed-by=/etc/apt/keyrings/myrepo.asc] https://download.example.com/linux/ubuntu {{ ansible_distribution_release }} stable"
        state: present

- name: Add an apt key by id from a keyserver
  ansible.builtin.apt_key:
    keyserver: keyserver.ubuntu.com
    id: 36A1D7869245C8950F966E92D8576A8BA88D21E9

- name: Add an Apt signing key, uses whichever key is at the URL
  ansible.builtin.apt_key:
    url: https://ftp-master.debian.org/keys/archive-key-6.0.asc
    state: present

- name: Add an Apt signing key, will not download if present
  ansible.builtin.apt_key:
    id: 9FED2BCBDCD29CDF762678CBAED4B06F473041FA
    url: https://ftp-master.debian.org/keys/archive-key-6.0.asc
    state: present

- name: Remove a Apt specific signing key, leading 0x is valid
  ansible.builtin.apt_key:
    id: 0x9FED2BCBDCD29CDF762678CBAED4B06F473041FA
    state: absent

# Use armored file since utf-8 string is expected. Must be of "PGP PUBLIC KEY BLOCK" type.
- name: Add a key from a file on the Ansible server
  ansible.builtin.apt_key:
    data: "{{ lookup('ansible.builtin.file', 'apt.asc') }}"
    state: present

- name: Add an Apt signing key to a specific keyring file
  ansible.builtin.apt_key:
    id: 9FED2BCBDCD29CDF762678CBAED4B06F473041FA
    url: https://ftp-master.debian.org/keys/archive-key-6.0.asc
    keyring: /etc/apt/trusted.gpg.d/debian.gpg

- name: Add Apt signing key on remote server to keyring
  ansible.builtin.apt_key:
    id: 9FED2BCBDCD29CDF762678CBAED4B06F473041FA
    file: /tmp/apt.gpg
    state: present

返回值

通用返回值在 此处 有文档记录,以下是此模块特有的字段。

描述

after

列表 / 元素=字符串

任何修改后 apt 密钥 id 或指纹的列表

返回: 更改时

示例: ["D8576A8BA88D21E9", "3B4FE6ACC0B21F32", "D94AA3F0EFE21092", "871920D1991BC93C"]

before

列表 / 元素=字符串

任何修改之前 apt 密钥 id 或指纹的列表

返回: 始终

示例: ["3B4FE6ACC0B21F32", "D94AA3F0EFE21092", "871920D1991BC93C"]

fp

字符串

要导入的密钥的指纹

返回: 始终

示例: "D8576A8BA88D21E9"

id

字符串

来自源的密钥 id

返回: 始终

示例: "36A1D7869245C8950F966E92D8576A8BA88D21E9"

key_id

字符串

计算出的密钥 id,它应该与“id”相同,但可能不同

返回: 始终

示例: "36A1D7869245C8950F966E92D8576A8BA88D21E9"

short_id

字符串

计算出的简短密钥 id

返回: 始终

示例: "A88D21E9"

作者

  • Jayson Vantuyl (@jvantuyl)