12.4. 为项目签名
对项目进行签名涉及 Ansible 项目目录。如需有关项目目录结构的更多信息,请参阅 Ansible 文档中的示例 Ansible 设置。
以下示例项目有一个非常简单的结构:一个清单文件,以及 playbook 目录下的两个小 playbook:
$ cd sample-project/ $ tree -a . . ├── inventory └── playbooks └── get_uptime.yml └── hello.yml 1 directory, 3 files
所用的命令假定您的工作目录是项目的根目录。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
使用这个文件,生成您的校验和清单文件并对其进行签名。这两个步骤都在一个 ansible-sign
命令中实现:
$ ansible-sign project gpg-sign .
成功执行会显示类似如下的输出:
[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 签名。
$ tree -a . . ├── .ansible-sign │ ├── sha256sum.txt │ └── sha256sum.txt.sig ├── inventory ├── MANIFEST.in └── playbooks ├── get_uptime.yml └── hello.yml