12.5. 为项目签名
对项目进行签名涉及 Ansible 项目目录。如需有关项目目录结构的更多信息,请参阅 Ansible 文档中的示例 Ansible 设置。
以下示例项目有一个非常简单的结构:一个清单文件,以及 playbook 目录下的两个小 playbook:
所用的命令假定您的工作目录是项目的根目录。ansible-sign 项目 命令将项目根目录用作其最后一个参数。
使用 . 表示当前工作目录。
Ansible-sign 通过对项目中所有安全文件进行校验和(SHA256)来保护内容,将它们编译到校验和清单文件中,然后对该清单文件进行签名。
要签署内容,请在项目根目录中创建 MANIFEST.in 文件,该文件告知 ansible-sign which 文件要保护。
在内部,ansible-sign 使用 Python distlib 库的 distlib.manifest 模块,因此 MANIFEST.in 必须遵循这个库指定的语法。有关 MANIFEST.in 文件指令的说明,请参阅 Python 打包用户指南。
在示例项目中,包括两个指令,生成以下 MANIFEST.in 文件:
include inventory recursive-include playbooks *.yml
include inventory
recursive-include playbooks *.yml
使用这个文件,生成您的校验和清单文件并对其进行签名。这两个步骤都在一个 ansible-sign 命令中实现:
ansible-sign project gpg-sign .
$ ansible-sign project gpg-sign .
成功执行会显示类似如下的输出:
[OK ] GPG signing successful! [NOTE ] Checksum manifest: ./.ansible-sign/sha256sum.txt [NOTE ] GPG summary: signature created
[OK ] GPG signing successful!
[NOTE ] Checksum manifest: ./.ansible-sign/sha256sum.txt
[NOTE ] GPG summary: signature created
该项目现已签名。
请注意,gpg-sign 子命令位于 project 子命令下。
对于签名项目内容,每个命令都以 ansible-sign 项目 开头。
每个 ansible-sign project 命令都使用项目根目录 。 作为其最终参数。
Ansible-sign 使用默认密钥环,并查找可找到的第一个可用 secret 密钥来为您的项目签名。您可以使用-- fingerprint 选项指定要使用的特定 secret 密钥,甚至使用 --gnupg-home 选项指定完全独立的 GPG 主目录。
如果您使用桌面环境,GnuPG 会自动提示您输入 secret 密钥的密码短语。
如果此功能无法正常工作,或者您在没有桌面环境的情况下工作,例如通过 SSH,您可以在 gpg-sign 后面使用 the -p --prompt-passphrase 标志,这会导致 ansible-sign 提示输入密码。
请注意,在项目目录中创建了一个 .ansible-sign 目录。此目录包含校验和清单以及分离的 GPG 签名。