Ansible Vault加密

加密host

我们有时候需要非免密登陆,往往这样才是正式环境,免密登陆机器有着不安全性。
但是,ansible要控制远程主机,就要在/etc/ansible/host文件中去写响应的用户名加密码。如下:

[web]
example.com ansible_user=your_username ansible_password=your_password

在这个例子中,我们定义了一个名为web的主机组,并为example.com指定了用户名和密码。当您运行Ansible playbook时,Ansible会使用提供的用户名和密码连接到远程主机。

将密码明文写在Ansible inventory文件中是不安全的做法,因为其他人可以访问该文件并获取密码。为了提高安全性,您应该考虑使用其他身份验证方法,例如SSH密钥对。如果您必须使用密码进行身份验证,请确保安全地存储您的密码,并在必要时更改它们。

另外,如果您使用的是较新版本的Ansible(2.5或更高版本),则建议使用Vault来加密您的密码。Vault是Ansible提供的一种安全存储敏感信息的方法。
那么怎么加密呢?

ansible-vault encrypt /etc/ansible/hosts
New Vault password: your_password_file
Confirm New Vault password: your_password_file

就发现cat /etc/ansible/hosts非正常文件内容,而是一些无关数字。
如何调用呢?
将文件密码保存到文件,并且给予600权限,保护文件

cat "your_password_file" >/etc/ansible/.ansible_host_passwd
chmod 600 /etc/ansible/.ansible_host_passwd
ansible all -m ping --vault-password-file /etc/ansible/.ansible_host_passwd

就能使用了。

加密敏感数据

Ansible Vault 是一个用于加密敏感数据的工具,例如密码、私钥、API 密钥等。以下是 Ansible 使用 Vault 加密密码的示例:

创建一个 Vault 文件

ansible-vault create passwords.yml

此命令将打开一个编辑器并提示输入密码。在编辑器中,添加以下内容:

---
db_password: mysecretpassword

保存并关闭文件。

加密已有文件中的密码
如果您已经有一个包含密码的文件,并且希望加密密码,请运行以下命令:

ansible-vault encrypt path/to/passwords.yml

此命令将提示您输入密码并使用该密码加密文件中的密码。

解密文件中的密码
要解密文件中的密码,可以运行以下命令:

ansible-vault decrypt path/to/passwords.yml

此命令将提示您输入密码并使用该密码解密文件中的密码。

在 playbook 中使用 Vault 文件
要在 playbook 中使用 Vault 文件中的加密密码,可以将以下内容添加到 playbook 中:

---
- hosts: all
  vars_files:
    - passwords.yml
  tasks:
    - name: Example task
      shell: some_command --with-password={{ db_password }}

此 playbook 将加载 Vault 文件中的变量,并在 some_command 中使用 db_password 变量。
运行 playbook:
运行 playbook 时,可以通过以下命令指定 Vault 文件的密码:

ansible-playbook myplaybook.yml --ask-vault-pass

此命令将提示您输入 Vault 文件的密码。一旦输入正确的密码,Ansible 将加载 Vault 文件并使用其中定义的密码来连接被控主机。