Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

Linux 批量修改遠程服務器 Root 密碼自動化腳本實戰

編輯:關於伺服器

適用場景

管理數十上百台 Linux 服務器,需定期輪換 Root 密碼,人工操作效率低且易出錯。本文提供基於 SSH 互信 + Expect/Shell 的全自動化方案。

前置條件

  1. 管理機(控制端)可網絡直達所有目標服務器。
  2. 目標服務器開啟 SSH 服務(默認 22 端口或自定義)。
  3. 管理機安裝 expect(含 mkpasswd):yum install -y expect。

步驟一:建立 SSH 互信(免密登錄)

# 1. 管理機生成金鑰對(一路回車)
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""

# 2. 批量分發公鑰(假設 IP 列表存放在 ip_list.txt)
for ip in $(cat ip_list.txt); do
    ssh-copy-id -o StrictHostKeyChecking=no -p 22 root@$ip
done

驗證: ssh root@IP "hostname" 無需密碼即可返回主機名。

步驟二:核心修改腳本 batch_chpasswd.sh

#!/bin/bash
# 批量修改遠程服務器 Root 密碼
# 依賴:expect, mkpasswd, ssh 互信已建立
# 作者:Kerryhu | 博客:https://kerry.blog.51cto.com

IP_LIST="/root/ip_list.txt"
LOG_FILE="/var/log/batch_chpasswd_$(date +%F).log"
PASS_LEN=12
MIN_UPPER=3

# 檢查 IP 列表
[ ! -f "$IP_LIST" ] && { echo "IP list not found: $IP_LIST"; exit 1; }

echo "=== 開始批量修改密碼 $(date) ===" | tee -a "$LOG_FILE"

for IP in $(cat "$IP_LIST"); do
    # 生成強密碼:長度12,至少3大寫
    TMP_PWD=$(mkpasswd -l $PASS_LEN -C $MIN_UPPER -d 2 -c 2 -s 1)
    NEW_PASS="${IP}_${TMP_PWD}"  # 格式:IP_隨機密碼,便於區分

    # 記錄原始密碼(生產環境建議加密存儲或對接密碼管理系統)
    echo "$(date '+%F %T') $IP $NEW_PASS" >> /root/password_vault.txt

    # 遠程修改密碼
    if ssh -o ConnectTimeout=10 -o BatchMode=yes root@$IP "echo '$NEW_PASS' | passwd --stdin root" &>/dev/null; then
        echo "$(date '+%F %T') [SUCCESS] $IP 密碼修改成功" | tee -a "$LOG_FILE"
    else
        echo "$(date '+%F %T') [FAILED]  $IP 密碼修改失敗,請手動排查" | tee -a "$LOG_FILE"
    fi
done

echo "=== 批量修改結束 $(date) ===" | tee -a "$LOG_FILE"

關鍵點解析

1. 密碼生成策略

mkpasswd -l 12 -C 3 -d 2 -c 2 -s 1 確保:12 位長度、≥3 大寫、≥2 數字、≥2 小寫、≥1 特殊符號,符合等保三級密碼複雜度要求。

2. 異常處理與幂等性

  • ConnectTimeout=10 避免單台卡死阻塞整體流程。
  • BatchMode=yes 強制使用公鑰認證,失敗即報錯,不回退交互式輸入。
  • 日誌記錄成功/失敗狀態,便於事後審計與重試。

3. 密碼存儲安全

示例中明文追加至 /root/password_vault.txt 僅為演示。生產環境**必須**:

  • 對接 HashiCorp Vault、1Password CLI 或自建加密資料庫。
  • 腳本執行後立即銷毀明文變量(unset NEW_PASS)。
  • 限制日誌文件權限 chmod 600。

進階擴展:異構端口支持

若目標機器 SSH 端口不統一,可擴展 IP 列表格式為 IP:PORT,腳本中解析:

IFS=':' read -r IP PORT <<< "$LINE"
PORT=${PORT:-22}  # 默認 22
ssh -p $PORT ...

總結

通過 SSH 互信 + Shell 腳本,實現了百台級服務器 Root 密碼的分鐘級批量輪換。核心優勢:**無需在目標機部署 Agent、依賴標準工具鏈、邏輯透明可審計**。配合定時任務(Crontab/Systemd Timer)即可落地自動化合規輪換流程。

Copyright © Windows教程網 All Rights Reserved