Ansible加密

目录

 1. 对整个脚本进行加密

2. 查看文件内容

3. 运行Playbook

4. 对脚本进行加密

5. 使用密码文件

5.1 对单个字符串进行加密


本章主要介绍如何对ansible的 playbook 进行加密。

  • 对整个playbook进行加密
  • 查看加密文件
  • 运行加密的playbook
  • 对playbook进行解密
  • 使用密码文件
  • 对单个字符串进行加密

前面写了许多playbook,这些playbook都是以明文的方式存在的,有时想对这些playbook进行加密,可以使用ansible-vault命令来实现。本章实验都在/home/demo6下操作,先把 demo6目录创建出来并把ansible.cfg 和 hosts拷贝

[bdqn@RHEL813 ~]$ mkdir demo6
[bdqn@RHEL813 ~]$ cp ansible.cfg hosts demo6/
[bdqn@RHEL813 ~]$ cd demo6
[bdqn@RHEL813 demo6]$ ls
ansible.cfg  hosts
[bdqn@RHEL813 demo6]$ 

 1. 对整个脚本进行加密

创建test1.yaml,内容如下。

[bdqn@RHEL813 demo6]$ cat test1.yaml 
---
- hosts: server2
  gather_facts: false
  vars:
          aa: haha001
  tasks:
          - name: 打印一个变量
            debug: msg="{{aa}}"
[bdqn@RHEL813 demo6]$ 
现在这个文件是以明文的方式存储的,对这个文件进行加密,加密的语法如下。
ansible‐vault encrypt file
这里的意思是对file文件进行加密,需要按提示输人密码。下面对test1.yaml进行加密,命
令如下。
[bdqn@RHEL813 demo6]$ ansible-vault encrypt test1.yaml 
New Vault password: 
Confirm New Vault password: 
Encryption successful
[bdqn@RHEL813 demo6]$ 
下面查看 testl.yaml的内容,命令如下。
[bdqn@RHEL813 demo6]$ cat test1.yaml 
$ANSIBLE_VAULT;1.1;AES256
62343461616535376532626534633031376434323636653532383530336536373237393132323463
3038653739616337316330616239623335363166353865660a373137626338386335643261343761
62653438643865643931613434373635663335646561393434376332646136316666356431613335
3132383830323864330a306564373864376532326436383762316631356361303236323736663734
35663538373439333030363037643461633438333230383064636135326138326139653536303035
39306166386463333933386363396237343834643263336334653338363761643263366338633735
33626536356237363633633864653430343635363466343332663434623566616633323333373837
36373339316263383233363737303766663566656637643166386664633433653531613432316362
39363131303039353637653739643663373966316563653931343266663765616663326333633363
62353637646663393138336663373136393639353761653936623231336436636230383434373261
35353766313665613631376335313631306333666266333232383463653630353237396537353734
62333933353365303635
[bdqn@RHEL813 demo6]$ 
可以看到,此文件已经是被加密的了。

2. 查看文件内容

如果要查看加密文件的内容,可以使用ansible-vault view file命令,需要输入解密密
码。下面查看 test1.yaml 的内容,命令如下。
[bdqn@RHEL813 demo6]$ ansible-vault view test1.yaml 
Vault password: 
---
- hosts: server2
  gather_facts: false
  vars:
          aa: haha001
  tasks:
          - name: 打印一个变量
            debug: msg="{{aa}}"
[bdqn@RHEL813 demo6]$ 
这样就可以看到文件的内容了,但是此文件并没有被解密,依然是加密的文件。
如果密码输入错误,则看不到文件的内容,如下所示。
[bdqn@RHEL813 demo6]$ ansible-vault view test1.yaml 
Vault password: 
ERROR! Decryption failed (no vault secrets were found that could decrypt) on test1.yaml for test1.yaml
[bdqn@RHEL813 demo6]$ 

3. 运行Playbook

如果直接运行加密后的YAML文件,则会报错,如下所示。

[bdqn@RHEL813 demo6]$ ansible-playbook test1.yaml 
ERROR! Attempting to decrypt but no vault secrets found
[bdqn@RHEL813 demo6]$ 
因为这个playbook是被加密的,要运行它必须输入解密密码才行。在运行时,可以加上-
-ask-vault-pass选项提示用户输入解密密码,命令如下。
[bdqn@RHEL813 demo6]$ ansible-playbook --ask-vault-pass test1.yaml
Vault password: 

PLAY [server2] ***********************************************************************************************************************************************

TASK [打印一个变量] ************************************************************************************************************************************************
ok: [server2] => {
    "msg": "haha001"
}

PLAY RECAP ***************************************************************************************************************************************************
server2                    : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[bdqn@RHEL813 demo6]$ 
这样playbook就可以正常地运行了。
如果要修改加密密码,可以使用ansible-vault rekey file命令来实现,需要先输入一次解密密码,然后输入两次新密码,如下所示。
[bdqn@RHEL813 demo6]$ ansible-vault rekey test1.yaml 
Vault password: 
New Vault password: 
Confirm New Vault password: 
Rekey successful
[bdqn@RHEL813 demo6]$ 

4. 对脚本进行加密

如果要对文件进行解密,可以使用ansible-vault decrypt file命令,然后输人解密密码即
可对加密文件进行解密。下面对test1.yaml进行解密,命令如下。
[bdqn@RHEL813 demo6]$ ansible-vault decrypt test1.yaml 
Vault password: 
Decryption successful
[bdqn@RHEL813 demo6]$ 
输入密码之后提示解密成功。下面查看test1.yaml的内容,命令如下。
[bdqn@RHEL813 demo6]$ cat test1.yaml 
---
- hosts: server2
  gather_facts: false
  vars:
          aa: haha001
  tasks:
          - name: 打印一个变量
            debug: msg="{{aa}}"
[bdqn@RHEL813 demo6]$ 
已经可以正常查看了。

5. 使用密码文件

加密、解密、查看等损作热雯要输入密加里扣密码写人一个文件中,在执行 ansible-
vault命令时加上“--vault-id密码文件”选项,即可不需要输人密码了。
先把密码写入aa.xt中,命令如下。
[bdqn@RHEL813 demo6]$ echo haha001 > aa.txt
[bdqn@RHEL813 demo6]$ cat aa.txt 
haha001
[bdqn@RHEL813 demo6]$ 
对test1.yaml进行加密,命令如下。
[bdqn@RHEL813 demo6]$ ansible-vault encrypt --vault-id aa.txt test1.yaml 
Encryption successful
[bdqn@RHEL813 demo6]$ 
这里显示加密成功。然后查看test1.yaml的内容,命令如下。
[bdqn@RHEL813 demo6]$ cat test1.yaml 
$ANSIBLE_VAULT;1.1;AES256
66356632393733333732663336343038386265653335356137613234386463346539346530356232
3731346663633133373939613034646530646230336266390a353566353930363635363263643162
31623539623834373665346561633064646132303734363861333163323366653539343563656539
6534633431623136310a646231326561366634306338636431666661346331343431323130333135
36393665663361633761646662643939663439653364653462326461336437366636663565613333
61336437626130383635366636623064613562386232313862623431303537363330646465646361
39396666393165353030366134626630383564616162643631356361636266633635366566646430
39316666313832663763656230303030396232313131373861626133636436303532343865343932
65643938323866363263386363656437313664666666306130656461313662336365633337326537
35376433373466313537653864396636363938613538366564383066386634386635393737623764
65366165633432633063646436333532356366386530323135303134373030656134366365353566
31656435333030336566
[bdqn@RHEL813 demo6]$ 
可以看到,已经被加密了。下面通过ansible-vault view查看test1.yaml的内容,命令如
下。
[bdqn@RHEL813 demo6]$ ansible-vault view --vault-id aa.txt test1.yaml 
---
- hosts: server2
  gather_facts: false
  vars:
          aa: haha001
  tasks:
          - name: 打印一个变量
            debug: msg="{{aa}}"
[bdqn@RHEL813 demo6]$ 
这里会直接读取密码文件中的密码,所以不需要我们再次输入密码。
加上-vault-id aa.txt选项运行playbook,命令如下。
[bdqn@RHEL813 demo6]$ ansible-playbook --vault-id aa.txt test1.yaml 

PLAY [server2] ***********************************************************************************************************************************************

TASK [打印一个变量] ************************************************************************************************************************************************
ok: [server2] => {
    "msg": "haha001"
}

PLAY RECAP ***************************************************************************************************************************************************
server2                    : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[bdqn@RHEL813 demo6]$ 
此时 playbook也可以正常运行了。解密test1.yaml,命令如下。
[bdqn@RHEL813 demo6]$ ansible‐vaultypt ‐‐vault‐id aa.txt test1.yaml
Decryption successful
可以看到,不需要输入密码,就解密完成了。

5.1 对单个字符串进行加密

可以不对整个文件进行加密,只加密某个字符串,命令如下。
[bdqn@RHEL813 demo6]$ cat test1.yaml 
---
- hosts: server2
  gather_facts: false
  vars:
          aa: haha001
  tasks:
          - name: 打印一个变量
            debug: msg="{{aa}}"
[bdqn@RHEL813 demo6]$ 
这里变量aa的值为haha001,是一个明文,可以单独对字符串 haha001进行加密,命令
如下。
[bdqn@RHEL813 demo6]$ ansible-vault encrypt_string --vault-id aa.txt haha001
!vault |
          $ANSIBLE_VAULT;1.1;AES256
          37363236613436646565643665396663633437346437376364383536313764376163656261366537
          6634373462346435616432356464373933316261616435350a386134646161313138616432633937
          36653031633134633738613061633730353138646665663938636331623366313939633035636365
          6562633838653038370a373632613438636164396666316162616439643166343136323336666630
          6365
Encryption successful
[bdqn@RHEL813 demo6]$ 
上面的加粗字就是加密后的密码,因为输出太长,这里用了省略号。
修改 test1.yaml的内容,把 haha001换成加密后的密文,内容如下。
[bdqn@RHEL813 demo6]$ cat test1.yaml 
---
- hosts: server2
  gather_facts: false
  vars:
          aa: !vault |
                       $ANSIBLE_VAULT;1.1;AES256
                       37363236613436646565643665396663633437346437376364383536313764376163656261366537
                       6634373462346435616432356464373933316261616435350a386134646161313138616432633937
                       36653031633134633738613061633730353138646665663938636331623366313939633035636365
                       6562633838653038370a373632613438636164396666316162616439643166343136323336666630
                       6365
  tasks:
          - name: 打印一个变量
            debug: msg="{{aa}}"
[bdqn@RHEL813 demo6]$ 
需要注意的是,aa后面的这个值不能用引号引起来。
运行此 plavbook,并指定密码文件,命令如下。
[bdqn@RHEL813 demo6]$ ansible-playbook --vault-id aa.txt test1.yaml 

PLAY [server2] ***********************************************************************************************************************************************

TASK [打印一个变量] ************************************************************************************************************************************************
ok: [server2] => {
    "msg": "haha001"
}

PLAY RECAP ***************************************************************************************************************************************************
server2                    : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[bdqn@RHEL813 demo6]$ 

可以看到,已经正常运行了。

你可能感兴趣的:(ansible)