使用Ansible的apt_key模块删密钥时提示‘Invalid key_id’
解决Ansible删除Ubuntu主机/etc/apt/trusted.gpg密钥时的"Invalid key_id"错误
问题根源
Ubuntu 20.04+版本中,apt-key命令已被弃用,系统APT密钥管理的默认结构发生变化,Ansible的apt_key模块对老式/etc/apt/trusted.gpg密钥环的兼容性下降,且8位短密钥ID容易出现冲突或无法被正确识别。
解决步骤
1. 获取正确的长密钥ID
在目标Ubuntu主机上执行以下命令,提取/etc/apt/trusted.gpg中密钥的16位长ID:
gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --list-keys
输出示例:
pub rsa4096 2018-09-18 [SC] [expires: 2025-09-16]
7EA0A9C3F273FCD8
uid [ unknown ] Docker Release (CE deb) docker@docker.com
这里的7EA0A9C3F273FCD8就是需要使用的长密钥ID,不要使用8位短ID。
2. 改用gpg命令直接删除密钥
放弃使用Ansible的apt_key模块,直接调用gpg命令操作密钥环,规避模块兼容性问题。示例任务:
- name: 删除/etc/apt/trusted.gpg中冲突的APT密钥 command: gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --delete-keys "{{ item }}" loop: - "7EA0A9C3F273FCD8" - "另一个冲突的长密钥ID" changed_when: false # 仅当密钥存在但删除失败时触发错误,密钥不存在时忽略 failed_when: "'not found in keyring' not in stderr and rc != 0" become: true
3. 迁移密钥到规范目录(可选)
为了符合APT新的密钥管理规范,建议将需要保留的密钥从/etc/apt/trusted.gpg迁移到/etc/apt/trusted.gpg.d/目录下的单独文件,避免后续冲突:
- name: 将密钥导出到trusted.gpg.d目录 command: gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --export "{{ item }}" > /etc/apt/trusted.gpg.d/{{ item }}.gpg loop: - "需要保留的长密钥ID" args: creates: /etc/apt/trusted.gpg.d/{{ item }}.gpg become: true
内容的提问来源于stack exchange,提问作者hydrian
相关产品推荐
相关产品推荐

