通過ansible批量設置隨機密碼

要求:
批量修改服務器的某賬號(假設root賬號)密碼,用隨機生成的字符串做密碼

環境:
假設/etc/ansible/hosts文件中服務器的目標組如下

[target-servers]
192.168.0.[1:100]

執行操作

1 通過openssl rand命令,在每臺遠程服務器上生成隨機字符串用做候選口令字符

ansible target-servers -m shell -a "openssl rand -base64 12 > ~/.openssl"

可以用如下命令查看生成的結果

ansible target-servers -m shell -a "cat ~/.openssl"

2 用候選字符串設置密碼
上面的openssl rand -base64 12命令生成的是16位的隨機字符串,比如,取前12位作爲密碼的話,可以通過如下set-pass.sh腳本實現:

#!/bin/bash
PASS=`cat ~/.openssl`
SUBPASS=`echo ${PASS:0:12}`
echo "root:$SUBPASS" | chpasswd

將如上腳本放在ansible中控機上,通過script模塊就可以在遠端服務器上執行,簡單的playbook如下set-pass.yml:

---
- hosts: '{{myhosts}}'
  remote_user: admin
  tasks:
  - name: set passwd
    script: ~/set-pass.sh 
    become: true

批量執行操作爲:

ansible-playbook set-pass.yml -e "myhosts=target-servers"

執行之後密碼就設置完成了。

3 將各服務器上的字符串文件收歸到中控機上
可以通過ansible的fetch模塊獲取遠端服務器上的文件,簡單的playbook如下fetch-file.yml:

---
- hosts: '{{myhosts}}'
  remote_user: admin
  tasks:
  - name: fetch file
    fetch:
      src: ~/.openssl
      dest: ~/fetch/openssl-{{ inventory_hostname }}
      flat: yes

批量執行操作爲:

ansible-playbook fetch-file.yml -e "myhosts=target-servers"

執行之後就可以在~/fetch/目錄下看到獲取到的文件,裏面的內容就是上面生成的密碼字符串

最後,可以將遠端服務器上的字符串文件刪除:

ansible target-servers -m shell -a "rm -f ~/.openssl"

上面的所有操作,可以彙總寫到一個playbook裏面。

發佈了101 篇原創文章 · 獲贊 48 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章