在Ansible中存储/检索多个ansible-vault密码

45次阅读
没有评论

问题描述

在使用Ansible时遇到了存储和检索多个ansible-vault密码的问题。最初的文档中提到可以将多个密码存储在单个文件中,并通过vault ID 进行标识。然而,最新的文档已经移除了这部分内容,导致用户不确定是否还能够以相同方式解决问题。用户尝试了不同的方式,但是遇到了困惑和错误。他想知道Ansible手册中描述的密码文件的用途,以及如何正确地使用它。

解决方案

根据提供的问答数据和讨论内容,以下是在Ansible中存储和检索多个ansible-vault密码的解决方案:

密码文件格式

在最初的文档中,提到可以将多个密码存储在单个文件中,并使用vault ID 标识每个密码。然而,根据讨论内容,这一功能可能已经被移除。目前,Ansible-vault 不再支持将多个密码存储在单个文件中,并通过vault ID 进行区分。

使用多个密码文件

如果你需要管理多个不同的ansible-vault密码,你可以通过创建多个密码文件,并使用--vault-id 参数来标识不同的密码文件。

以下是操作步骤:

  1. 创建密码文件: 针对不同的ansible-vault密码,创建不同的密码文件。你可以将这些文件存储在不同的目录中,以便进行更好的管理。

  2. 加密文件: 使用ansible-vault encrypt 命令,通过--vault-id 参数指定使用的密码文件和vault ID。这将使用指定的密码文件中的内容来加密目标文件。

例如:
bash
ansible-vault encrypt --vault-id=dev@~/pass_dev.txt my_file.yml

  1. 解密文件: 使用ansible-vault view 命令,同样通过--vault-id 参数指定密码文件和vault ID,来解密加密的文件。

例如:
bash
ansible-vault view --vault-id=dev@~/pass_dev.txt my_file.yml

注意:在使用ansible-vault view 命令时,Vault将使用指定密码文件中的内容来解密文件。在这里,vault ID 被视为提示,并非用于选择特定密码。

简化命令

如果你希望更加简化命令,你可以在密码文件中添加不同的密码,并使用环境变量 ANSIBLE_VAULT_ID_MATCH 来匹配vault ID。这样,你可以通过一个命令来解密多个文件。

例如,假设你有以下密码文件内容:

.passvaults:

dev my_dev_pass
test my_test_pass
prod my_prod_pass

你可以运行以下命令来解密多个文件:

ANSIBLE_VAULT_ID_MATCH=1 ansible-vault view --vault-id=.passvaults file1.yml file2.yml file3.yml

这样,Ansible Vault 将尝试使用匹配密码文件中的vault ID 的密码来解密文件。

注意事项

  • 如果你需要管理多个不同的ansible-vault密码,创建多个密码文件是一个有效的解决方案。但是请注意,现在无法将多个密码存储在单个文件中,并通过vault ID 进行标识,因为这部分功能可能已被移除。
  • 当使用ansible-vault view 命令解密文件时,指定的vault ID 将被视为提示,并不用于选择特定的密码,而是选择匹配的密码文件。
  • 使用环境变量 ANSIBLE_VAULT_ID_MATCH 可以更方便地在一个命令中解密多个文件,但需要确保密码文件中的vault ID 与文件中的vault标签相匹配。

请注意,由于Ansible可能会不断进行更新和变更,解决方案中提到的命令和行为可能会因版本差异而发生变化。建议在使用解决方案之前查阅最新的Ansible文档和资源,以确保获得正确的指导。

正文完