使用Ansible安全批量修改Linux服務(wù)器密碼的詳細(xì)方案
在Linux服務(wù)器管理中,批量修改用戶密碼是重要的安全運(yùn)維操作。Ansible通過user模塊和加密工具可實(shí)現(xiàn)安全、高效的密碼批量更新,核心步驟包括密碼加密處理、Playbook編寫和安全控制。
密碼加密處理
生成SHA-512加密密碼
在控制節(jié)點(diǎn)執(zhí)行以下命令生成加密密碼(需安裝whois工具):
sudo apt-get install whois # Debian/Ubuntu mkpasswd --method=SHA-512 --stdin
輸入明文密碼后,輸出類似$6$salt$encrypted的字符串,用于Playbook中的密碼字段。
使用Ansible Vault加密敏感數(shù)據(jù)
# 創(chuàng)建加密變量文件 ansible-vault create secrets.yml
文件內(nèi)容示例:
vault_target_user: admin vault_encrypted_pass: "$6$somesalt$encryptedhash"
執(zhí)行Playbook時(shí)通過以下方式解密:
ansible-playbook change_password.yml --ask-vault-pass # 交互式輸入密碼 # 或 ansible-playbook change_password.yml --vault-password-file ~/.vault_pass # 使用密碼文件
Playbook實(shí)現(xiàn)方案
方案1:批量修改多用戶密碼(靜態(tài)列表)
---
- name: 安全修改用戶密碼
hosts: linux_servers
become: true
vars_files:
- secrets.yml # 加載加密變量
tasks:
- name: 驗(yàn)證目標(biāo)用戶存在
ansible.builtin.command: "getent passwd {{ vault_target_user }}"
register: user_check
ignore_errors: true
changed_when: false
- name: 更新用戶密碼
ansible.builtin.user:
name: "{{ vault_target_user }}"
password: "{{ vault_encrypted_pass }}"
update_password: always
when: user_check.rc == 0方案2:動(dòng)態(tài)傳遞參數(shù)(單用戶修改)
---
- name: 修改單個(gè)用戶密碼
hosts: all
become: true
tasks:
- name: 動(dòng)態(tài)設(shè)置密碼
user:
name: "{{ target_user | default('root') }}"
password: "{{ new_pass | password_hash('sha512') }}"
update_password: always執(zhí)行命令:
ansible-playbook single_user_change.yml -e "target_user=ubuntu new_pass=Secure@123"
關(guān)鍵安全控制
文件系統(tǒng)權(quán)限
chmod 600 secrets.yml # 僅所有者可讀 chown ansible-runner secrets.yml # 限制為特定用戶
執(zhí)行權(quán)限控制(sudo)
在/etc/sudoers中配置:
ansible-runner ALL=(root) NOPASSWD: /usr/bin/ansible-playbook change_password.yml
生產(chǎn)環(huán)境最佳實(shí)踐
密碼輪換策略
每次執(zhí)行生成新salt值:
import secrets salt = secrets.token_hex(8) # 生成16字符隨機(jī)salt
定期更新vault密碼:
ansible-vault rekey secrets.yml
審計(jì)與監(jiān)控
啟用Ansible日志:
[defaults] log_path = /var/log/ansible.log
使用--check模式預(yù)演變更:
ansible-playbook change_password.yml --check --diff
灰度發(fā)布
- 先在小規(guī)模主機(jī)組測試:
ansible-playbook change_password.yml --limit staging_servers
補(bǔ)充:以下為AI生成在Linux批量修改服務(wù)器用戶密碼的方法,供大家參考!
Linux批量修改服務(wù)器用戶密碼的方法
我來介紹幾種在Linux批量修改服務(wù)器用戶密碼的方法:
方法1:使用 chpasswd 命令(推薦)
準(zhǔn)備密碼文件
創(chuàng)建 passwords.txt 文件,格式為 用戶名:密碼
user1:NewPass123! user2:NewPass456! user3:NewPass789!
批量修改
# 作為root用戶執(zhí)行 cat passwords.txt | chpasswd # 或者加密方式(更安全) cat passwords.txt | chpasswd -c SHA512
方法2:使用 passwd 和循環(huán)
從文件讀取用戶和新密碼
#!/bin/bash
while IFS=: read -r user pass; do
echo "$user:$pass" | chpasswd
echo "用戶 $user 密碼已修改"
done < passwords.txt方法3:批量生成隨機(jī)密碼
#!/bin/bash
# 為指定用戶批量生成隨機(jī)密碼
USERS="user1 user2 user3"
for user in $USERS; do
# 生成12位隨機(jī)密碼
newpass=$(openssl rand -base64 12)
echo "$user:$newpass" | chpasswd
echo "用戶: $user, 新密碼: $newpass" >> newpasswords.txt
done方法4:使用 expect 實(shí)現(xiàn)交互式修改
#!/usr/bin/expect -f
set f [open "userlist.txt" r]
while {[gets $f line] != -1} {
set user [lindex $line 0]
set pass [lindex $line 1]
spawn passwd $user
expect "新的密碼:"
send "$pass\r"
expect "重新輸入新的密碼:"
send "$pass\r"
expect eof
}
close $f方法5:通過SSH批量修改多臺(tái)服務(wù)器
#!/bin/bash
# 需要在多臺(tái)服務(wù)器上批量修改
SERVER_LIST="server1 server2 server3"
USERNAME="root"
NEW_PASS="CommonNewPass123!"
for server in $SERVER_LIST; do
ssh $USERNAME@$server "echo '$USERNAME:$NEW_PASS' | chpasswd"
if [ $? -eq 0 ]; then
echo "$server: 密碼修改成功"
else
echo "$server: 密碼修改失敗"
fi
done安全注意事項(xiàng)
1. 密碼文件安全處理
# 創(chuàng)建密碼文件后設(shè)置權(quán)限 chmod 600 passwords.txt chown root:root passwords.txt # 使用后立即刪除或加密存儲(chǔ) shred -u passwords.txt
2. 使用加密傳輸
# 通過SSL加密傳輸密碼文件 scp encrypted_passwords.txt user@server:/tmp/
3. 驗(yàn)證密碼復(fù)雜度
#!/bin/bash
# 密碼復(fù)雜度驗(yàn)證腳本
check_password() {
local pass=$1
if [[ ${#pass} -lt 8 ]]; then
echo "密碼長度至少8位"
return 1
fi
if ! [[ "$pass" =~ [A-Z] ]]; then
echo "密碼需要包含大寫字母"
return 1
fi
if ! [[ "$pass" =~ [a-z] ]]; then
echo "密碼需要包含小寫字母"
return 1
fi
if ! [[ "$pass" =~ [0-9] ]]; then
echo "密碼需要包含數(shù)字"
return 1
fi
return 0
}完整示例腳本
#!/bin/bash
# batch_change_passwords.sh - 批量修改用戶密碼腳本
# 配置
USER_LIST_FILE="users.txt" # 格式:用戶名
PASSWORD_FILE="passwords.txt" # 格式:用戶名:密碼
LOG_FILE="password_change.log"
# 檢查root權(quán)限
if [ "$EUID" -ne 0 ]; then
echo "請以root用戶運(yùn)行此腳本"
exit 1
fi
# 生成隨機(jī)密碼的函數(shù)
generate_random_pass() {
openssl rand -base64 12 | tr -d "=/+" | cut -c1-12
}
# 方法1:從文件讀取已有密碼
batch_change_from_file() {
echo "開始批量修改密碼..." | tee -a $LOG_FILE
while IFS=: read -r user pass; do
if id "$user" &>/dev/null; then
echo "$user:$pass" | chpasswd
if [ $? -eq 0 ]; then
echo "$(date): 用戶 $user 密碼修改成功" >> $LOG_FILE
else
echo "$(date): 用戶 $user 密碼修改失敗" >> $LOG_FILE
fi
else
echo "$(date): 用戶 $user 不存在" >> $LOG_FILE
fi
done < $PASSWORD_FILE
}
# 方法2:為用戶生成隨機(jī)密碼
batch_generate_random() {
echo "生成隨機(jī)密碼..." | tee -a $LOG_FILE
> new_passwords.txt
while read user; do
if id "$user" &>/dev/null; then
newpass=$(generate_random_pass)
echo "$user:$newpass" | chpasswd
echo "$user: $newpass" >> new_passwords.txt
echo "$(date): 用戶 $user 密碼已生成" >> $LOG_FILE
fi
done < $USER_LIST_FILE
echo "新密碼已保存到 new_passwords.txt"
chmod 600 new_passwords.txt
}
# 主菜單
echo "請選擇操作:"
echo "1. 使用預(yù)定義密碼文件修改"
echo "2. 為用戶生成隨機(jī)密碼"
read -p "選擇 (1/2): " choice
case $choice in
1)
if [ -f "$PASSWORD_FILE" ]; then
batch_change_from_file
else
echo "密碼文件 $PASSWORD_FILE 不存在"
exit 1
fi
;;
2)
if [ -f "$USER_LIST_FILE" ]; then
batch_generate_random
else
echo "用戶列表文件 $USER_LIST_FILE 不存在"
exit 1
fi
;;
*)
echo "無效選擇"
exit 1
;;
esac
echo "操作完成!日志保存在 $LOG_FILE"這個(gè)腳本提供了靈活的批量密碼修改方案,可以根據(jù)實(shí)際需求選擇合適的實(shí)現(xiàn)方式。
到此這篇關(guān)于Ansible安全批量修改Linux服務(wù)器密碼的完整方案的文章就介紹到這了,更多相關(guān)Linux批量修改服務(wù)器用戶密碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Linux使用ss命令結(jié)合zabbix對socket做監(jiān)控
zabbix是一個(gè)基于WEB界面的提供分布式系統(tǒng)監(jiān)視以及網(wǎng)絡(luò)監(jiān)視功能的企業(yè)級(jí)的開源解決方案。這篇文章主要分為三塊進(jìn)行說明:介紹ss命令;對機(jī)器總體的socket進(jìn)行監(jiān)控;某些機(jī)器連接該機(jī)器的數(shù)量進(jìn)行監(jiān)控2021-06-06
Centos7下Samba服務(wù)器配置(實(shí)戰(zhàn))
這篇文章主要介紹了Centos7下Samba服務(wù)器配置(實(shí)戰(zhàn)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Linux系統(tǒng)修改環(huán)境變量的常用方法
這篇文章主要給大家介紹了Linux系統(tǒng)修改環(huán)境變量的常用方法,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02
Apache環(huán)境下配置多個(gè)ssl證書搭建多個(gè)站點(diǎn)的方法
這篇文章主要介紹了Apache環(huán)境下配置多個(gè)ssl證書搭建多個(gè)站點(diǎn)的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07
centOS7 橋接模式設(shè)置靜態(tài)Ip的方法步驟
這篇文章主要給大家介紹了關(guān)于centOS7 橋接模式設(shè)置靜態(tài)Ip的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用centOS7具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Linux內(nèi)核設(shè)備驅(qū)動(dòng)之proc文件系統(tǒng)筆記整理
今天小編就為大家分享一篇關(guān)于Linux內(nèi)核設(shè)備驅(qū)動(dòng)之proc文件系統(tǒng)筆記整理,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
Linux實(shí)現(xiàn)雙網(wǎng)卡綁定的代碼詳解
linux 主機(jī)安裝雙網(wǎng)卡,共享一個(gè)IP地址,對外提供訪問,實(shí)際同樣連接兩條物理線路到交換機(jī)實(shí)現(xiàn)平時(shí)雙網(wǎng)卡同時(shí)工作,分流網(wǎng)絡(luò)壓力,同時(shí)提供冗余備份,監(jiān)控,防止物理線路的單點(diǎn)故障,本文介紹了Linux實(shí)現(xiàn)雙網(wǎng)卡綁定的代碼示例,需要的朋友可以參考下2024-07-07

