ansible 加密
2023-12-27 13:55:38
    		 
 本章主要介绍如何对ansible的 playbook 进行加密。  
 
- 对整个playbook进行加密
- 查看加密文件
- 运行加密的playbook
- 对playbook进行解密
- 使用密码文件
- 对单个字符串进行加密
 
 前面写了许多playbook,这些playbook都是以明文的方式存在的,有时想对这些  
 
 
 playbook进行加密,可以使用ansible-vault命令来实现。本章实验都  
 
 
 在/home/lduan/demo6下操作,先把 demo6目录创建出来并把ansible.cfg 和 hosts拷贝  
 
 
 进去,命令如下。 
 
[root@pp ~]# mkdir demo6
[root@pp ~]# cp ansible.cfg hosts demo6/
[root@pp ~]# cd demo6/
[root@pp demo6]# 
 
  35.1 对整个脚本进行加密  
 
 
  
  创建test1.yaml,内容如下。  
 
 
 [root@pp demo6]# cat test1.yaml 
---
- hosts: up
    gather_facts: false
  vars:
    aa: haha001
  tasks:
  - name: 打印一个变量
    debug: msg="{{aa}}"
[root@pp demo6]# 
 
  现在这个文件是以明文的方式存储的,对这个文件进行加密,加密的语法如下。 
   
    
     
      
     
      
     
      
       
     
     
    
   
 
 
 1 ansible‐vault encrypt file 
   这里的意思是对file文件进行加密,需要按提示输人密码。下面对test1.yaml进行加密,命  
  
 
   
   令如下。 
  
 
  [root@pp demo6]# ansible-vault encrypt test1.yaml
New Vault password: 
Confirm New Vault password: 
Encryption successful
[root@pp demo6]# 
 
    下面查看 testl.yaml的内容,命令如下。 
   
 
   [root@pp demo6]# cat test1.yaml 
$ANSIBLE_VAULT;1.1;AES256
64396437306633393735313832303232306165656463363639376165626236346465666136366162
3333303437376263333235656530396437386132633363650a306366306162396338626633303237
37376137383237323262643839323530386637616536663862356231653564303931623731656232
6662333735353633300a353263663262353864356565306562663466666435393839333939323163
30663733623536303936623663623961356438646531643866353962616530363431353436363266
32303739343264633964383935646532383061653936333637613562353130616162353432313161
65396161303366623264346664306631383337303732303466643537363566386237656234323666
64616537653334623633343235316361333661373263636434346664333337306461613937393961
30386436626461326562393735323065653864306136323237356431633661396633393635353965
3536646637323532386139326337666438663465363834386635
[root@pp demo6]# 
 
     可以看到,此文件已经是被加密的了。 
    
 
     
     
     
     35.2 查看文件内容  
    
 
     
     
     如果要查看加密文件的内容,可以使用ansible-vault view file命令,需要输入解密密  
    
 
     
     码。下面查看 test1.yaml 的内容,命令如下。 
    
 
    [root@pp demo6]# ansible-vault view test1.yaml 
Vault password: 
---
- hosts: up
  gather_facts: false
  vars:
    aa: haha001
  tasks:
  - name: 打印一个变量
    debug: msg="{{aa}}"
[root@pp demo6]# 
 
     这样就可以看到文件的内容了,但是此文件并没有被解密,依然是加密的文件。  
    
 
     
     如果密码输入错误,则看不到文件的内容,如下所示。 
    
 
    [root@pp 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
[root@pp demo6]# 
 
      35.3 运行playbook  
     
 
      
      如果直接运行加密后的YAML文件,则会报错,如下所示。 
     
 
    [root@pp demo6]# ansible-playbook test1.yaml 
ERROR! Attempting to decrypt but no vault secrets found
[root@pp demo6]# 
 
     因为这个playbook是被加密的,要运行它必须输入解密密码才行。在运行时,可以加上-  
    
 
     
     -ask-vault-pass选项提示用户输入解密密码,命令如下。 
    
 
    [root@pp demo6]# ansible-playbook --ask-vault-pass test1.yaml 
Vault password: 
PLAY [up] ********************************************************************************
TASK [打印一个变量] ****************************************************************************
ok: [up] => {
    "msg": "haha001"
}
PLAY RECAP *******************************************************************************
up                         : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
[root@pp demo6]# 
 
     这样playbook就可以正常地运行了。  
    
 
     
     如果要修改加密密码,可以使用ansible-vault rekey file命令来实现,需要先输入一次解  
    
 
     
     密密码,然后输入两次新密码,如下所示。  
    
 
    [root@pp demo6]# ansible-vault rekey test1.yaml 
Vault password: 
New Vault password: 
Confirm New Vault password: 
Rekey successful
[root@pp demo6]# 
 
      这样test1.yaml的加密密码就被更改了。 
     
 
      
     
     35.4 对脚本进行解密  
    
 
     
     如果要对文件进行解密,可以使用ansible-vault decrypt file命令,然后输人解密密码即  
    
 
     
     可对加密文件进行解密。下面对test1.yaml进行解密,命令如下。 
    
 
    [root@pp demo6]# ansible-vault decrypt test1.yaml 
Vault password: 
Decryption successful
[root@pp demo6]# 
 
      输入密码之后提示解密成功。下面查看test1.yaml的内容,命令如下。 
     
 
     [root@pp demo6]# cat test1.yaml 
---
- hosts: up
  gather_facts: false
  vars:
    aa: haha001
  tasks:
  - name: 打印一个变量
    debug: msg="{{aa}}"
[root@pp demo6]# 
 
       35.5 使用密码文件  
      
 
       
       加密、解密、查看等损作热雯要输入密加里扣密码写人一个文件中,在执行 ansible 
      
 
       
       vault命令时加上“--vault-id密码文件”选项,即可不需要输人密码了。  
      
 
       
       先把密码写入aa.xt中,命令如下。 
      
 
     [root@pp demo6]# echo haha001 > aa.txt
[root@pp demo6]# cat aa.txt 
haha001
[root@pp demo6]# 
 
  对test1.yaml进行加密,命令如下。 
 
 
 [root@pp demo6]# ansible-vault encrypt --vault-id aa.txt test1.yaml 
Encryption successful
[root@pp demo6]# 
 
   这里显示加密成功。然后查看test1.yaml的内容,命令如下。 
  
 
  [root@pp demo6]# cat test1.yaml 
$ANSIBLE_VAULT;1.1;AES256
31623936343832626133663131343835316439373331666632663539376532356134363633653362
3537306130383330666166643531376335343931323139630a333839383964366363393332356231
33353365383234663564663531346636646130643861653330653335363361376563376463626564
6463393736373866380a306236396539313266353739363639343739653862303232346233313264
64646233383466363736363531333063343166306365313335306138373534613135366238623666
38363165363463666331393331323562303761353031343432396262313666323538653233366437
36613033313533303766323164316337373061393631666531303138343230613135623264306630
37643035333732663833613161386431633937363962623331663834363163646461363633386538
63663231633436306464393236653130393031366230383931646539306661323663616536633565
3734333531663134646332333137343532383539326134396634
[root@pp demo6]# 
 
    可以看到,已经被加密了。下面通过ansible-vault view查看test1.yaml的内容,命令如  
   
 
    
    下。  
   
 
   [root@pp demo6]# ansible-vault view --vault-id aa.txt test1.yaml 
---
- hosts: up
  gather_facts: false
  vars:
    aa: haha001
  tasks:
  - name: 打印一个变量
    debug: msg="{{aa}}"
[root@pp demo6]# 
 
     这里会直接读取密码文件中的密码,所以不需要我们再次输入密码。  
    
 
     
     加上-vault-id aa.txt选项运行playbook,命令如下。 
    
 
    [root@pp demo6]# ansible-playbook --vault-id aa.txt test1.yaml 
PLAY [up] ********************************************************************************
TASK [打印一个变量] ****************************************************************************
ok: [up] => {
    "msg": "haha001"
}
PLAY RECAP *******************************************************************************
up                         : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
[root@pp demo6]# 
 
       35.6 对单个字符串进行加密  
      
 
       
       可以不对整个文件进行加密,只加密某个字符串,命令如下。 
      
 
     [root@pp demo6]# cat test2.yaml 
---
- hosts: up
  gather_facts: false
  vars:
    aa: haha001
  tasks:
  - name: 打印一个变量
    debug: msg="{{aa}}"
[root@pp demo6]# 
 
  这里变量aa的值为haha001,是一个明文,可以单独对字符串 haha001进行加密,命令  
 
 
  
  如下。  
 
 
 [root@pp demo6]# ansible-vault encrypt_string --vault-id aa.txt haha001
!vault |
          $ANSIBLE_VAULT;1.1;AES256
          36303964313233363064303536373965643334393764383239633732383138353266643138366261
          6130313833613236333632373934383137643164623137340a633739646261653938646438626366
          31313966383863353139316432653530303036626537613530323739383161323132343862303134
          3335343032663464620a636635316464373265613365346134613139353034303639666663366538
          3731
Encryption successful
[root@pp demo6]# 
 
   上面的加粗字就是加密后的密码,因为输出太长,这里用了省略号。  
  
 
   
   修改 test1.yaml的内容,把 haha001换成加密后的密文,内容如下。 
  
 
  [root@pp demo6]# cat test2.yaml 
---
- hosts: up
  gather_facts: false
  vars:
    aa: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          36303964313233363064303536373965643334393764383239633732383138353266643138366261
          6130313833613236333632373934383137643164623137340a633739646261653938646438626366
          31313966383863353139316432653530303036626537613530323739383161323132343862303134
          3335343032663464620a636635316464373265613365346134613139353034303639666663366538
          3731
  tasks:
  - name: 打印一个变量
    debug: msg="{{aa}}"
[root@pp demo6]# 
 
    需要注意的是,aa后面的这个值不能用引号引起来。  
   
 
    
    运行此 plavbook,并指定密码文件,命令如下。  
   
 
   [root@pp demo6]# ansible-playbook --vault-id aa.txt test2.yaml 
PLAY [up] ********************************************************************************
TASK [打印一个变量] ****************************************************************************
ok: [up] => {
    "msg": "haha001"
}
PLAY RECAP *******************************************************************************
up                         : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
[root@pp demo6]# 
 
     可以看到,已经正常运行起来了。 
    
 
   
    			文章来源:https://blog.csdn.net/ZXDNM_zwz/article/details/135241865
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!