Ansible vault 加解密,官方文档理解起来没那么清晰易懂。
Ansible vault主要是对主机清单文件中的密码信息进行加解密。
一、加解密的密码
对于同一内容的加解密的密码必须是同一个!
在加解密之前,需要定义加解密用的密码 ,加解密用的密码 可以通过命令提示符提供、指定密码文件、 指定Vault ID三种方式提供(使用第三方密码存储工具时,密码客户端脚本)
1、命令提示符提供
不指定或指定参数--ask-vault-pass
2、Vault ID 是管理多个加解密用的密码的一种方式,vault ID实质就是一个标签,与密码形成对应关系,方便记忆,在有多个加密密码时使用,提供指定的标签
【--vault-id label@source】
使用vault-id时,source来源可以是提示、文件或脚本
如示例
ansible-playbook --vault-id site.yml #等效于 --ask-vault-pass
ansible-playbook --vault-id @prompt site.yml #没有标签的提示输入密码
ansible-playbook --vault-id dev@prompt site.yml #有标签的提示输入密码
ansible-playbook --vault-id dev-password-file site.yml #是使用密码文件 等效于 --ask-vault-pass 或 --vault-password-file,因此很少使用
ansible-playbook --vault-id dev@dev-password-file --vault-id prod@prompt site.yml #从文件中读取的 “dev” 密码并提示输入 “prod” 密码,“dev”、“prod”仅仅是一个标签而已
3、密码文件则是将密码写入到文件中存储,单行文本
二、加密字符串
使用ansible-vault encrypt_string加密某字符串并命名一个变量名
ansible-vault encrypt_string <password_source> '<string_to_encrypt>' --name '<string_name_of_variable>'
password_source来源可以是提示、文件或脚本(使用第三方密码存储工具时,密码客户端脚本),具体取决于您存储 Vault 密码的方式
ansible-vault encrypt_string '123456' --name 'passvar'
ansible-vault encrypt_string --stdin-name '<string_name_of_variable>'
输入加密密码以及要加密的字符串 进行加密处理,--stdin-name中间不能有空格
1、通过提示输入加密密码进行加密,不指定password_source则表示提示输入
示例:
ansible-vault encrypt_string '我是要加密的内容' --name 'passvar'
通过提示输入加密密码后,会返回加密后的内容,变量名: !vault | 加密后的内容 这样的格式,将其拷贝至主机清单或剧本任务脚本中
passvar: !vault |
$ANSIBLE_VAULT;1.1;AES256
33366366616230636631333065626339376663353938396334633533626662313130633865306239
6531356565373934656236656265343237386636636530650a353665303666616536316133333365
38353763323330306266376531346163663932313733646232306138376134303337653036343839
6338623330316133620a386631363066363237663364653130643834386664633736613434303564
38323932373331326431323033343462366463623863356636316439623232353030
2、通过密码文件加密
ansible-vault encrypt_string --vault-password-file 密码文件 '要加密的内容' --name '变量名'
3、通过vault-id指定客户端脚本加密
ansible-vault encrypt_string --vault-id label@source 密码文件 '要加密的内容' --name '变量名'
使用加密变量
https://docs.redhat.com/zh-cn/documentation/red_hat_ceph_storage/4/html/installation_guide/encrypting-ansible-password-variables-with-ansible-vault_install
解密字符串:
echo '$ANSIBLE_VAULT;1.1;AES256
38613630653964363232383061613635623738636462323465326638363066343936343737633538
6135363333616463393061656563626635303432616665340a643538353034326334333666626132
61396664393362323130316433663339373433383061636532336234326239653934393737643864
3239633837346430330a643464383334383030363131653162323332346561333765373330356233
3466' | ansible-vault decrypt --vault-password-file=vault.txt
此处是用密码文件的形式提供解密密码进行解密。
*******非常重要,加密字符串不能直接使用在主机清单或剧本中充当变量使用,需要通过变量文件的形式通过传递变量参数进行**********
否则会报解析错误
JSON: Expecting value: line 1 column 1 (char 0) Syntax Error while loading YAML. could not find expected ':' The error appears to be in
'/home/test3.yml': line 31, column 1, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be:
$ANSIBLE_VAULT;1.1;AES256 38613630653964363232383061613635623738636462323465326638363066343936343737633538 ^ here
请参考下面的方法,建议使用变量文件。
https://docs.redhat.com/zh-cn/documentation/red_hat_ceph_storage/4/html/installation_guide/encrypting-ansible-password-variables-with-ansible-vault_install
示例:
配置yml文件中定义变量以及使用传递变量
vars:
ansible_password: "{{ passvar }}"
然后在etc/ansible/group_vars/all.yml中将生成的变量加密字符串拷贝进去
passvar: !vault |
$ANSIBLE_VAULT;1.1;AES256
31666634356463613837393930326461396234643366366663373337333763613633373439613366
3733663738663161633137643830633235363939373731390a356636666239333434356632353430
34366566376562343334633738636366636561396664633431346438326534303730643764353131
6236313231323865390a313265616533393539346436366166323466303763386566393036333362
6431
调用ansible或ansible-playbook时使用-e参数传递变量文件,变量文件可以是yml或json格式
ansible all -m command -a 'ls /tmp' -i /home/test3.yml --ask-vault-pass -e @/etc/ansible/group_vars/all.yml
三、加密文件
#加密现有文件
ansible-vault encrypt filename
#解密文件
ansible-vault view filename
959

被折叠的 条评论
为什么被折叠?



