由于 apt-key 已弃用,如何使用 ansible playbook 管理 trust.gpg.d 中的密钥环文件?

2024-01-20

Before apt-key已弃用,我正在使用 Ansible 剧本来添加和更新服务器中的密钥。眼下,apt-key不再更新密钥。在几次搜索中,我发现我需要使用gpg现在。但是,我有很多服务器,我不想为每台服务器手动执行此操作。有没有办法管理我的钥匙圈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

I tried apt-key update但这对我不起作用。如果密钥已存在但已过期,则不再更新它。


简而言之,您需要将具有正确扩展名的 GPG 密钥放入默认情况下不搜索的单独目录中,并将存储库配置指向该特定文件。

有关为什么需要单独目录的更多信息,请参阅这是对“警告:apt-key 已弃用。改为管理 trust.gpg.d 中的密钥环文件”的答案 https://stackoverflow.com/a/71384057.

警告:apt不接受以 .gpg 扩展名保存的 ASCII GPG 密钥。

您可以通过以下方式验证您是否拥有旧的 ASCII GPG 格式(.asc)或较新的二进制 GPG 格式(.gpg)file:

# 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...

如果您的密钥是旧格式,您可以使用 .asc 扩展名,或者您可以选择通过以下方式解除它的保护gpg --dearmor elastic.gpg转换为新的二进制格式并使用 .gpg 扩展名。

去装甲步骤对于 ansible 自动化来说很烦人,所以我建议你只使用上游提供的任何格式。

在 Ubuntu 22.04 上,您需要使用一个未预加载的文件夹 -/etc/apt/keyrings- 或者您可以创建自己的目录并使用它。

至于Ansible部分,你可以使用get_url or file将 GPG 密钥推送到系统上,然后使用apt_repository像之前一样添加存储库,并添加指定密钥环。

将二进制 GPG 格式与 .gpg 一起使用

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

或者如果上游仍未切换,则使用 .asc 扩展名

- 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

然后你可以像以前一样通过 apt_repository 模块定义你的存储库。

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

请记住 apt_repository 使用旧的.list格式而不是新的 DEB822 兼容格式.sources format.

如果您想要/需要使用较新的 DEB822 格式并且您碰巧正在运行 Ansible 2.15 或更高版本,则应该使用deb822_repository 模块 https://docs.ansible.com/ansible/latest/collections/ansible/builtin/deb822_repository_module.html.

如果您无法使用较旧的 Ansible 核心,您可以自行对其进行模板化,类似于:

tasks/main.yaml

- name: Add Elastic repo
  notify: apt update force
  ansible.builtin.template:
    src: repo.j2
    dest: /etc/apt/sources.list.d/elastic-8.x.sources
    mode: '0644'
  vars:
    repo_name: Example PPA
    repo_uris: https://example.com/packages/8.x/apt
    repo_suites: stable
    repo_components: main
    repo_signed_by: /etc/apt/keyrings/example.gpg

templates/repo.j2

X-Repolib-Name: {{ repo_name }}
Types: deb
URIs: {{ repo_uris }}
Suites: {{ repo_suites }}
{% if repo_components is defined %}
Components: {{ repo_components }}
{% endif %}
Signed-By: {{ repo_signed_by }}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由于 apt-key 已弃用,如何使用 ansible playbook 管理 trust.gpg.d 中的密钥环文件? 的相关文章

随机推荐

  • WebStorm 实时模板 $SELECTION$ 正则表达式

    我发现我可以使用 SELECTION 作为 编辑变量 模式内实时模板函数的参数 但是 只有当我调用 Surround with Live Template 热键时 它才会起作用 然而 只有具有 SELECTION 在 模板文本 区域中写入的
  • 在 React 中使用键盘上/下箭头键滚动?

    我有一个自定义列表框 一个div包含其他的垂直列表div孩子们 我想添加向上 向下箭头键导航来更改当前选择的子项 因此 当我单击第一个项目并按down arrow key 它应该允许我选择第二个项目 以下项目 如果我点击up arrow k
  • 获取唯一的机器ID

    我想获得唯一的不可更改的机器 ID 例如计算机的处理器序列号 以便分发软件而无需复制 我尝试了处理器序列号和硬盘序列号 这些序列号在格式化并重新安装 Windows 后都发生了变化 知道如何获得计算机的不可更改的序列号吗 也许最简单的方法是
  • 可以解析C代码的最简单的解析算法是什么?

    有谁知道可以解析 C 代码的最弱的广泛使用的解析算法家族是什么 即C语法是LL 1 LR 0 LALR 1 等吗 我很好奇 因为作为一个副项目 我有兴趣为其中一个系列编写一个解析器生成器 并且希望最终能够为另一个副项目解析 C 代码 看起来
  • 如何将长整数时间转换为NSString或NSDate来显示时间?

    我从 Java Date 中得到了一个序列号 它可以转换为长整数 例如 1352101337000 我遇到的问题是如何将这个长整数解析回NSDate或NSString 以便我可以清楚地知道序列号显示的时间 有人对这种情况有解决方案吗 用这个
  • 使用核心图形绘制浮雕圆弧

    我正在尝试实现一个自定义滑块 如下图所示 到目前为止我所做的看起来像这样 请帮我画出这样效果的弧线 我的代码如下 我正在做的是使用 CGContext AddArc 和线宽 LineWidth 绘制圆弧 void drawThumbAtPo
  • NSIS 安装程序 - 显示不同的许可证

    我正在尝试修改现有的 NSIS 安装脚本 以允许根据用户是新用户还是现有用户向用户提供不同的许可证文件 我有预先存在的代码 可以检测 onInit 部分中的现有安装 然而 我在尝试使用 NSIS 提供的许可证屏幕时遇到了障碍 例如 Inse
  • 我们怎样才能同步发送HTTP请求呢?

    如果我没猜错的话 AJAX 中的 A 意味着异步发送 HTTP 请求 而不等待 HTTP 响应 我了解到我们可以通过以下方式发送异步 HTTP 请求XMLHttpRequest 例如 function handleButtonPress e
  • Jetpack Compose 中的边缘淡化行为

    我有一个视图 有一排芯片 上面有fadingEdge 我正在 Compose 中重新实现该页面 但我不确定如何实施fadingEdgeCompose 中的行为 我会放置一个具有相同长度的垫片 并有一个渐变作为背景 但这看起来不像相同的效果
  • Internet Explorer 不支持我的最小高度:100% 使用 Flexbox

    我一直在 StackOverflow 和网络上查找所有 min height 100 解决方案 但我似乎找不到适合我 相对简单 需求的解决方案 这就是我想要的 我有一个两列容器 两列应该拉伸到相同的高度 当内容没有填满屏幕时 列应拉伸到整个
  • Websocket连接错误资源不足

    我正在开发一个聊天应用程序 两个用户可以在其中相互交谈 我正在使用 Flask socketio 和 React 来实现这一点 我一直在努力解决我在使用 socket io 时遇到的这个问题 这是我在浏览器控制台上偶尔遇到的错误连接 与 w
  • 如何真正测试 Python 中的信号处理?

    我的代码很简单 def start signal SIGINT lambda signal frame raise SystemExit startTCPServer 所以我用信号处理注册我的应用程序SIGINT 然后我启动一个 TCP 侦
  • Android 上外部显示器的屏幕截图?

    Android 应用程序 通过Presentation类和相关设施 可以在外部显示器 HDMI MHL Miracast 等 上显示单独的内容 而不是在手机或平板电脑自己的触摸屏 我在这里称之为 主显示器 上显示单独的内容 对于主显示器 我
  • 显示 Python 多处理池 imap_unordered 调用的进度?

    我有一个脚本 它成功地执行了一组多处理池任务imap unordered call p multiprocessing Pool rs p imap unordered do work xrange num tasks p close No
  • 我需要链接哪些库来构建 googlemock 示例?

    我能够在 VS2010 中编译 googlemock v1 6 x 并生成发布库和调试库 换句话说 我遇到的问题不是这个Visual Studio 2010 中的 GoogleMock 和 GoogleTest https stackove
  • 如何根据 y 位置动态更改标记点的颜色

    我有下面的交互图highchart js图书馆在R library highcharter hchart data frame Date seq Sys Date Sys Date 10 by 1 day Value sample c 1
  • 如果在 uitextview 中按下 Shift 键(修饰键),则检测/获取通知

    I m trying to figure out if there is any way in which we can detect if shift key is pressed or if any notification is se
  • 如何在 Django 表单中将两个表单字段呈现为一个字段?

    我正在开发 Django 应用程序 我需要以不同的方式呈现表单 该表单包含与一个人相关的多个字段 1 Firstname 2 Lastname 3 Email 4 Address 5 City 6 Country 7 Phone 8 Pin
  • $("...")[0].reset 不是一个函数...在 jQuery 中重置表单

    我正在尝试使用 jQuery 重置某些表单 但遇到了一些麻烦 除了涉及编写函数或自定义插件的解决方案之外 我一次又一次地发现重置方法不是 jQuery 的标准部分 而是标准 Javascript 的一部分 不管怎样 我的第一个方法是 the
  • 由于 apt-key 已弃用,如何使用 ansible playbook 管理 trust.gpg.d 中的密钥环文件?

    Before apt key已弃用 我正在使用 Ansible 剧本来添加和更新服务器中的密钥 眼下 apt key不再更新密钥 在几次搜索中 我发现我需要使用gpg现在 但是 我有很多服务器 我不想为每台服务器手动执行此操作 有没有办法管