如何在 Ansible 中加密二进制文件?

Dan*_*her 11 ansible

我们正在使用Ansible Vault在我们的 Ansible Playbook git 存储中存储密码、证书私钥等。我们现有的所有私有数据都是文本形式,因此我们可以将其存储在变量中。然后将它们用于模板或与content复制模块的参数一起使用。

现在,我们有一个 Java KeyStore 文件,遗憾的是它是二进制格式。因此,它不能存储在变量中——或者至少我不知道该怎么做。在 git 中正确加密我们的文件但在运行时可用的最简单方法是ansible-playbook什么?

我已经尝试过但没有成功:

  • 编码以base64二进制文件,存储在变量中的编码数据,并使用所述模板与模块{{base64_data | b64decode}}EF BF BD导致结果文件的大量十六进制转储。这三个字节以 UTF-8 对 Unicode 替换字符进行编码,因此将二进制数据解释为文本存在问题。
  • 编码以base64二进制文件,存储在变量中的编码数据,并使用所述复制用模块content="{{base64_data | b64decode}}"。Ansible 抱怨“一个变量在模块 args 中插入了一个新参数。” 当使用单引号而不是双引号时,Ansible 会抱怨“解析参数字符串时出错”,并将所有二进制数据的副本转储到终端...

小智 5

您可以使用带有 base64 变量的 shell 命令来执行此操作。

- vars:
  - myvar: "<my_base64_var>"
- name: Create binary file
  shell: "echo '{{myvar}}' | base64 -d > /var/tmp/binary.dat"
Run Code Online (Sandbox Code Playgroud)

埃里克

  • 请注意,他们似乎已将@MikeGleasonjrCouturier 引用的文本移至 ansible 文档中的不同页面;立即查看 https://docs.ansible.com/ansible/latest/vault.html。 (3认同)
  • 我认为 vault 现在支持它:“ vault 功能还可以加密任意文件,甚至是二进制文件。如果将 vault 加密的文件作为 src 参数提供给 copy 模块,则该文件将放置在目标主机上的目的地解密(假设在运行播放时提供了有效的保险库密码)。” -http://docs.ansible.com/ansible/playbooks_vault.html (2认同)