📅  最后修改于: 2023-12-03 15:07:37.127000             🧑  作者: Mango
在使用 Ansible 执行任务时,有时需要在 playbook 中存储主机的用户名和密码。这种情况可以使用 Ansible 的 vault 功能来加密存储这些敏感信息。
以下是如何在 TypeScript 中使用 Ansible 的 vault 功能存储主机的用户名和密码的步骤:
首先,创建一个 YAML 文件,用于存储主机信息和相关的凭据。示例文件如下:
# hosts.yml
all:
hosts:
webserver1:
ansible_host: 192.168.1.10
ansible_user: "{{ vault_ansible_user }}"
ansible_password: "{{ vault_ansible_password }}"
webserver2:
ansible_host: 192.168.1.11
ansible_user: "{{ vault_ansible_user }}"
ansible_password: "{{ vault_ansible_password }}"
接下来,使用 Ansible Vault 加密在 YAML 文件中使用的凭据。在命令行中执行以下命令:
ansible-vault encrypt_string 'my_password' --name 'vault_ansible_password'
ansible-vault encrypt_string 'my_username' --name 'vault_ansible_user'
执行这些命令后,会要求你输入一个密码来加密生成的字符串。完成这些步骤后,将获得类似以下内容的输出:
!vault |
$ANSIBLE_VAULT;1.1;AES256
66373366346435623661663438373965383936646537623133636435336631656234303839646634
3864383631333764393962303266383337356365353435300a666438383637633831623038333239
36326163633431326330653765373731633937643235636165383235333130636263643437376364
3035613363333033380a346265623532623064636364656131626262313538653932336535383565
3935
vault_ansible_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
33303062643133353531343333373235373636343334616231333464353734393036643832336134
6165666166383537376431646565396236343861373336350a376563383965376639383636363639
31653334336334653939663064386365643535373561346539333264646662336660643334383262
3466373830653733660a386163373430323637633162306630396537306165363931363330633332
3732
vault_ansible_user: !vault |
$ANSIBLE_VAULT;1.1;AES256
30623736663738623434666663636336383066663034373931373933626139303535646238646230
6263633562316339303635513866313832373262623662360a393233326135656163633738313066
33663761316539396431356336383239393634636238393662353262636137336365363438613330
3331623834356437390a633630633561633239633838633064383464633165356134313934653762
3861
将这些输出复制到 YAML 文件中的变量占位符内。
现在,根据需要编写 Ansible Playbook 来执行主机上的任务。示例 Playbook 如下:
# playbook.yml
- hosts: webserver1,webserver2
gather_facts: false
tasks:
- name: Get hostname
command: hostname
register: hostname_output
become: true
- debug: var=hostname_output.stdout_lines
在这个示例 Playbook 中,定义了两个主机(webserver1
和 webserver2
),并且通过 Ansible 的 command
模块执行了一个简单的命令以获取主机名。
最后,在命令行中运行 Playbook。在运行 Playbook 前,会要求你输入之前用于加密字符串的密码。
ansible-playbook -i hosts.yml playbook.yml --ask-vault-pass
当你成功输入密码后,Ansible 将执行 Playbook 并在远程主机上执行定义的任务。
使用 Ansible Vault 将主机的用户名和密码存储在 Ansible Playbook 中可以确保这些敏感信息不会存储在明文文件中。通过这种方法,可以更安全地管理主机的凭据,并确保保护敏感信息不会被泄露。