管理机密、事实和循环
文章目录
1. 管理机密
1.1 ansible vault
ansible可能需要访问密码或apl密钥等敏感数据,以便能配置受管主机,通常,此信息可能以纯文本形式存储于清单变量或其他ansible文件中,但,任何有权访问ansible文件的用户都能访问到,存在安全风险
ansible提供得ansible vault可以解密加密任何由ansible使用得结构化数据文件。若要使用ansible-vault,可通过ansible-vault的命令行工具创建、编辑、加密、解密和查看文件
1.1.1 创建加密的文件
使用ansible-vault create filename创建一个新的加密文件,输入密码,默认编辑器是vi打开文件
[root@my ansible]# ansible-vault create group_vars/apache
New Vault password:
Confirm New Vault password:
1.1.2 查看加密的文件
使用ansbile-vault view filename查看加密的文件,而不必打开它编辑
[root@my ansible]# cat group_vars/apache
$ANSIBLE_VAULT;1.1;AES256
33396234613132373566303135306537363139366334343463383065363061336362633333663436
3762353739663035323539613466643239326661633566620a353464626663623133366562636239
63623636346131383162326236666563373933363033613461383032646330303834303434613664
3863386262383932350a343130623164633132376632393563396461613739366630626633376637
36396633666166376537316237613862643666343861363132626566303233353430643862303961
3265636561646264343838626133353239376665613632356364
[root@my ansible]# ansible-vault view group_vars/apache
Vault password:
ansible_user=root
ansible_password=1
1.1.3 解密已经加密的文件
使用ansbile-vault decrypt filename命令,永久解密
[root@my ansible]# ansible-vault decrypt group_vars/apache
Vault password:
Decryption successful
[root@my ansible]# cat group_vars/apache
ansible_user=root
ansible_password=1
1.1.4 文件已经存在现在进行加密
使用ansible-vault encrypt filename
[root@my ansible]# ansible-vault encrypt group_vars/apache
New Vault password:
Confirm New Vault password:
Encryption successful
1.1.5 编辑已经加密的文件
使用ansible-vaule edit filename
[root@my ansible]# ansible-vault edit group_vars/apache
Vault password: //这里输入密码
//输入密码后自动进入vi编辑器
ansible_user=root
ansible_password=1
1.1.6 已经加密的文件重新加密
使用ansible-vault rekey filename,修改新的密码需要输入旧的密码
[root@my ansible]# ansible-vault rekey group_vars/apache
Vault password:
New Vault password:
Confirm New Vault password:
Rekey successful
1.2 playbook和ansible vault
要运行可访问通过ansible vault加密的文件的playbook,需要向ansible-playbook命令提供加密文件,如果不提供密码,playbook将返回错误
[root@my ansible]# ansible-playbook group_vars/apache //没有提供密码
ERROR! Attempting to decrypt but no vault secrets found
要为playbook提供vault密码,可使用–vault-id选项,列如
//这是自己手动输入密码
[root@my ansible]# ansible-playbook --vault-id @prompt playbook/test.yml
Vault password (default):
ERROR! variable files must contain either a dictionary of variables, or a list of dictionaries. Got: user:yi (<class 'ansible.parsing.yaml.objects.AnsibleUnicode'>)
此外,也可使用–vault-password-file=文件名
[root@my ansible]# ls -a
. .. ansible.cfg group_vars hosts host_vars inventory playbook roles
[root@my ansible]# vim .mima //设置一个存放密码的隐藏文件名
[root@my ansible]# cat .mima
1
[root@my ansible]# ansible-vault view --vault-password-file=.mima group_vars/apache
ansible_user=root
ansible_password=1
[root@my ~]# openssl rand -base64 20 //这是随机生成一个密码
2mSBfy2utJiEIhIGVJMLrVSg008=
//解密
[root@my ansible]# ansible-vault decrypt --vault-password-file=.mima group_vars/apache
Decryption successful
[root@my ansible]# cat group_vars/apache
ansible_user=root
ansible_password=1
//对一个已经存在的文件加密
[root@my ansible]# ansible-vault encrypt --vault-password-file=.mima group_vars/apache
Encryption successful
//重新设置密码又不想输入新的密码
[root@my ansible]# vim .xinmima
[root@my ansible]# cat .xinmima
1
[root@my ansible