16.ansible valut 字符加密解密

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
posted @ 2022-10-19 11:18  老夫聊发少年狂88  阅读(216)  评论(0编辑  收藏  举报