You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Ansible在RHEL 8中导入GPG密钥并解决相关报错

RHEL 8系统下通过Ansible导入GPG密钥操作问题

问题场景

尝试使用Ansible rpm_key模块导入FireEye GPG密钥后安装对应Agent安装包,持续出现GPG签名校验失败报错。
初始编写的Playbook代码如下:

- name: Import the FireEye GPG Key from a file
  rpm_key:
    state: present
    key: /tmp/buildfiles/antivirus/fireeye-key.gpg

- name: Install FireEye Agent package
  yum:
    name: /tmp/buildfiles/antivirus/fireeye/xagt-34.28.6-1.el7.x86_64.rpm
    state: present

报错复现记录

  • 直接复制官网密钥原始内容保存为fireeye-key.gpg文件执行,报错信息:
fatal: [default]: FAILED! => {"changed": false, "msg": "Failed to validate GPG signature for xagt-33.46.0-1.el7.x86_64"}
  • 删除密钥文件第二行、倒数第二行空行后再次执行,报错信息:
fatal: [default]: FAILED! => {"changed": false, "msg": "gpg: directory '/root/.gnupg' created\ngpg: keybox '/root/.gnupg/pubring.kbx' created\ngpg: WARNING: no command supplied.  Trying to guess what you mean ...\ngpg: invalid armor header: mQINBFu7nVUBEADC6YSWxdVWbh3Aeh+2vkJpFeRe8hnvx38tUcbYqO9sm3y/NDTA\\n\ngpg: /root/.gnupg/trustdb.gpg: trustdb created\n"}
  • 跳过密钥导入步骤直接安装RPM包,同样报错:
fatal: [default]: FAILED! => {"changed": false, "msg": "Failed to validate GPG signature for xagt-34.28.6-1.el7.x86_64"}

问题根因与修复方案

核心根因

  • 报错中出现的invalid armor header直接指向密钥文件格式损坏:手动从网页复制的密钥内容包含转义字符(报错信息中的\\n说明文件内存储的是字面量反斜杠加字符n,而非真实换行符)、多余格式字符,不符合ASCII装甲GPG密钥的格式规范,导致GPG/RPM无法正确识别密钥内容,最终导入失败。
  • 签名校验失败的本质原因是密钥未正确导入RPM信任库,无法完成安装包的签名校验。
  • 额外注意:当前使用的是适配RHEL7/CentOS7的el7版本安装包,在RHEL8系统上安装即使密钥校验通过,也可能出现依赖冲突问题,优先获取适配RHEL8的el8版本安装包使用。

落地修复步骤

  1. 获取标准格式的GPG密钥
    禁止手动复制网页上的密钥文本保存,直接在目标环境通过命令下载并转换为标准密钥格式,确保密钥文件严格以-----BEGIN PGP PUBLIC KEY BLOCK-----开头、-----END PGP PUBLIC KEY BLOCK-----结尾,中间无多余转义字符、无效空行:
    # 从官方密钥地址下载后直接转换为标准GPG密钥格式,避免复制引入的格式错误
    curl -s 官方密钥页面地址 | gpg --dearmor > /tmp/buildfiles/antivirus/fireeye-key.gpg
    # 本地校验密钥是否可被GPG正常识别,无输出报错则格式正确
    gpg --show-keys /tmp/buildfiles/antivirus/fireeye-key.gpg
    
  2. 修正Playbook逻辑
    增加密钥有效性校验、导入结果校验步骤,避免无效执行:
    - name: Verify local GPG key file format is valid
      ansible.builtin.command: gpg --show-keys /tmp/buildfiles/antivirus/fireeye-key.gpg
      changed_when: false
    
    - name: Import FireEye GPG key to RPM trust store
      ansible.builtin.rpm_key:
        state: present
        key: /tmp/buildfiles/antivirus/fireeye-key.gpg
    
    - name: Confirm key is successfully imported
      ansible.builtin.command: rpm -q gpg-pubkey --qf '%{NAME}-%{VERSION}-%{RELEASE} -> %{SUMMARY}\n' | grep -i fireeye
      changed_when: false
    
    - name: Install FireEye Agent (replace with el8 version package for RHEL8)
      ansible.builtin.yum:
        name: /tmp/buildfiles/antivirus/fireeye/xagt-对应版本.el8.x86_64.rpm
        state: present
        # 测试阶段可临时开启下方配置跳过GPG校验,生产环境必须注释
        # disable_gpg_check: true
    
  3. 可选简化方案
    如果本地文件导入始终存在格式问题,可以直接在rpm_key模块中指定官方公钥的直链地址,跳过本地文件存储环节,从根源避免文件复制过程中的格式损坏:
    - name: Import FireEye GPG key directly from official source
      ansible.builtin.rpm_key:
        state: present
        key: 官方GPG公钥直链地址
    

排查技巧

如果执行后仍然报签名校验错误,先在目标机手动执行rpm --import /tmp/buildfiles/antivirus/fireeye-key.gpg导入密钥,再执行rpm -K /path/to/xagt.rpm查看安装包的本地校验结果,如果手动执行仍然校验失败,说明使用的密钥和安装包版本不匹配,需要重新获取对应安装包版本的签名密钥。


内容的提问来源于stack exchange,提问作者Brian G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:18:57