要求:
批量修改服務器的某賬號(假設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裏面。