ansible学习之ansible-vault

相关文档参考:http://www.ansible.com.cn/docs/playbooks_vault.html#what-can-be-encrypted-with-vault

ansible-vault 功能介绍

Ansible-Vault是一个用于加密和管理Ansible playbook中敏感数据的工具。通过创建、编辑、加密、解密、查看和重置密码,可以安全地存储如用户名和密码等信息。在剧本中,可以使用vars_files加载加密的变量文件,并在运行playbook时使用--ask-vault-pass选项确保安全解密。

ansible-vault 子命令介绍

复制代码
create              创建新的保险库加密文件
decrypt             解密保险库加密文件
edit                编辑保险库加密文件
view                查看保险库加密文件
encrypt        		加密YAML文件
rekey               重设保险库加密文件的密钥

ansible-vault 子命令 实操演练

使用create 创建一个加密文件

bash 复制代码
# 对secret.yaml文件访问设置密码
[root@localhost ~]# ansible-vault create secret.yaml
New Vault password: 	
Confirm New Vault password: 
bash 复制代码
# secret.yaml 文件中的内容(被加密)
passwd:123456
bash 复制代码
# 可以看出是使用 AES256 进行加密
[root@localhost ~]# cat secret.yaml
$ANSIBLE_VAULT;1.1;AES256
37656638623563636332376630303334306531333431373364363061316430663032323961633033
3437633732353534663566323139613939396139666364630a346336653039316665393435663463
61333335346363633966326430356164366235613834303734393461343432383361396462386330
3662666238653165640a366133653230356635666261393632643638393538366665616662323231
6439

使用 view 查看加密内容(需要输入访问密码)

bash 复制代码
[root@localhost ~]# ansible-vault view secret.yaml 
Vault password: 
passwd:123456

使用 edit 重新编辑 secret.yaml 的内容

bash 复制代码
[root@localhost ~]# ansible-vault edit secret.yaml 
Vault password:
bash 复制代码
passwd:654321
bash 复制代码
[root@localhost ~]# ansible-vault view secret.yaml 
Vault password: 
passwd:654321

使用 encrypt 将已存在的yaml文件加密

bash 复制代码
[root@localhost ~]# cat foo.yaml
api: 12345678
bash 复制代码
[root@localhost ~]# ansible-vault encrypt    foo.yaml
New Vault password: 
Confirm New Vault password: 
Encryption successful
bash 复制代码
[root@localhost ~]# ansible-vault view    foo.yaml
Vault password: 
api: 12345678

使用 rekey 重设访问密码

bash 复制代码
# 第一遍输入旧密码,第二遍输入新密码,第三遍确定密码
[root@localhost ~]# ansible-vault  rekey    foo.yaml
Vault password: 
New Vault password: 
Confirm New Vault password: 
Rekey successful

使用 decrypt 还原加密的文件的内容

bash 复制代码
[root@localhost ~]# ansible-vault  decrypt foo.yaml
Vault password: 
Decryption successful
[root@localhost ~]# cat foo.yaml 
api: 12345678

子命令都可以对多个文件使用

ansible-vault 在playbook中使用

创建密码库文件,在文件中添加key/value 字典。

bash 复制代码
[root@localhost ~]# ansible-vault create secret.yaml
New Vault password: 
Confirm New Vault password: 
bash 复制代码
PW: 123456

编写playbook文件,并导入密码库文件,并使用debug模块测试变量。

bash 复制代码
- hosts: all
  vars_files: 
    - secret.yaml
  tasks:
    - name: Test variable
      debug:
        var: PW

访问密码库文件需要密码,所有需要使用 --ask-vault-pass 提示输入密码。

bash 复制代码
[root@localhost ~]# ansible-playbook --ask-vault-pass playbook.yaml 
Vault password: 

PLAY [all] **************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]

TASK [Test variable] ****************************************************************************************************************************************
ok: [192.168.0.132] => {
    "PW": 123456
}

PLAY RECAP **************************************************************************************************************************************************
192.168.0.132              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

可以看出已经打印出了 PW 变量的值。

当然可以将密码库密码存放到文件中使用 --vault-password-file 导入就不用输入密码了

bash 复制代码
[root@localhost ~]# cat passwd.txt 
123456
bash 复制代码
[root@localhost ~]# ansible-playbook playbook.yaml  --vault-password-file ./passwd.txt 

PLAY [all] **************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.0.132]

TASK [Test variable] ****************************************************************************************************************************************
ok: [192.168.0.132] => {
    "PW": 123456
}

PLAY RECAP **************************************************************************************************************************************************
192.168.0.132              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

也可以在配置文件中指定密码存在文件位置,就不用指定了

bash 复制代码
[root@localhost ~]# cat /etc/ansible/ansible.cfg  | grep vault
# specifying --vault-password-file on the command line.
#vault_password_file = /path/to/vault_password_file
相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习