encrypt_string子命令
刚才介绍的方法都是对整个文件进行加密,但是通常,我们并不需要加密整个文件,加密整个文件后,反而可能会对我们的阅读造成困扰,有时我们只是想把”密码隐藏起来”而已。
从2.3版本开始,使用encrypt_string子命令,可以加密”字符串”,通过加密字符串的功能,能够有效的隐藏敏感变量的值,比如,隐藏变量列表中密码变量的值,假设,我现在的playbook如下:
# cat test.yml
- hosts: test71
vars:
test_user: "testuser"
test_passwd: "123456"
tasks:
- debug:
msg: "{{test_user}}"
- debug:
msg: "{{test_passwd}}"
我觉得test_passwd这个密码变量直接以明文的方式存储在playbook中不太安全,因为所有有权限查看该playbook的人都能直接看到密码,我们需要对密码字符串的值(也就是123456)进行加密,以保证它不会明文显示在这里,所以,我们需要借助到”ansible-vault encrypt_string”命令,操作如下:
注:我们从最原始的操作开始,以免产生疑问
# ansible-vault encrypt_string 123456
上例表示,使用”ansible-vault encrypt_string”命令对”123456″这个字符串进行加密,加密时,会提示你输入密码,你输入的密码用于加密和解密字符串,此处,我输入了”aaaa”作为加密解密的密码,输入密码后,”ansible-vault encrypt_string”命令会将加密后的字符串输入到屏幕中,如下:
# ansible-vault encrypt_string 123456
New Vault password:
Confirm New Vault password:
!vault |
$ANSIBLE_VAULT;1.1;AES256
30316633646364663764333666383437373439353538353336623532323131623739353663653637
3430626637386231366236643034643365323738336231330a326534623039363030393739663237
65623635616666656233333337636439366535383334393138623231613035373133323832383335
3737386234363761350a343839326663626664396436336465393862613237393864316533663533
6335
如你所见,这返回的一长串文本就是”123456″加密后的文本,现在,复制这串文本,用这串文本替换playbook中的”123456″,替换后的playbook如下:
# cat test.yml
- hosts: test71
vars:
test_user: "testuser"
test_passwd: !vault |
$ANSIBLE_VAULT;1.1;AES256
30316633646364663764333666383437373439353538353336623532323131623739353663653637
3430626637386231366236643034643365323738336231330a326534623039363030393739663237
65623635616666656233333337636439366535383334393138623231613035373133323832383335
3737386234363761350a343839326663626664396436336465393862613237393864316533663533
6335
tasks:
- debug:
msg: "{{test_user}}"
- debug:
msg: "{{test_passwd}}"
此刻,”123456″这串明文字符串已经被替换为了加密后的字符串,那么我们来运行一下这个playbook,由于上文中已经说明了各个选项的用法,所以此处不再赘述,使用如下两条命令的效果是相同的,都会提示你输入加密时所使用的密码(也就是”aaaa”):
# ansible-playbook --ask-vault-pass test.yml
# ansible-playbook --vault-id prompt test.yml
输入”aaaa”后,即可正常执行playbook,执行结果如下,可以从如下结果看出,字符串已经被正常解密了,获取到了我们原来设置的值,也就是”123456″,这样我们就能做到在运行时获取到真正的”字符串原文”,而在playbook中不再显示明文字符串了。
# ansible-playbook --vault-id prompt test.yml
Vault password (default):
PLAY [test71] *************************************
TASK [Gathering Facts] *****************************
ok: [test71]
TASK [debug] *************************************
ok: [test71] => {
"msg": "testuser"
}
TASK [debug] **************************************
ok: [test71] => {
"msg": "123456"
}
PLAY RECAP **************************************
test71 : ok=3 changed=0 unreachable=0 failed=0