如何定期更改root密碼
我有 60 個具有不同 root 密碼的系統。
每 3 個月我必須更改他們的密碼。
目前我必須手動登錄 60 個系統並提供 60 個不同的密碼。
有沒有聰明的方法來做到這一點?我可以將 Ansible 用於此類工作嗎?
一種方法是:
- 創建一個包含主機名和純文字 root 密碼的文本文件 (*)。使用您喜歡的任何欄位分隔符 - 選項卡很好。
理想情況下,您會使用類似
makepasswd
或的程序pwgen
來生成足夠長和復雜的密碼。IMO,現在考慮使用 16 個字元是絕對最小值,而且越長越好。例如,如果您有一個主機名列表(每行一個)
hosts.txt
,請使用以下內容:#!/bin/bash rm -f passwords.txt while read -r host ; do printf "%s\t%s\n" "$host" "$(pwgen -r \''`$' -y -c -n 32 1)" >> passwords.txt done < hosts.txt
(這用於
-r
防止在密碼中使用單引號、反引號和 $,因為在下面顯示的 single-quoted-string-inside-double-quotesssh
命令中處理它們將是一個 PITA)。範例執行:
$ ./generate-passwords.sh $ cat passwords.txt host1 >?Mg^un=-Ipd8ZkY^TUC,_Gf/PAs%=9t host2 XS4?oZ@[+U\,(XeYOBcp{E^Q;!]2]ex< host3 SfupD}=a\J;}TJqqX.r}Kj;ab>Z|\=S2
您將需要此列表,否則您將無法知道遠端電腦上的密碼是什麼。 2.
ssh
進入每個主機並用於chpasswd
設置密碼。openssl passwd
為避免密碼以純文字形式出現在遠端機器的程序列表中,請使用並使用chpasswd
‘選項對本地機器上的密碼進行預加密-e
(如果您是機器的唯一使用者,這只是“安全”的。. ..以及“安全”一詞的非常有限的定義)。在此範例中,我使用了散列-6
選項。SHA-512
#!/bin/bash while IFS=$'\t' read -r host pass; do enc=$(printf "%s" "$pass" | openssl passwd -6 stdin) ssh "$host" "echo 'root:$enc' | chpasswd -e" done < passwords.txt
這真的很簡單和原始。沒有錯誤檢查。或記錄。但它確實展示瞭如何使用現有工具(如
pwgen
、openssl
和 )以及chpasswd
自動更改密碼的基本思想。我曾經在一所大學裡每學期都使用與這些類似的腳本,在那裡我為特定課程的新生生成密碼,在這些課程中,需要對特定機器(與主網路隔離)的 shell 訪問。該列表被列印並切成條狀,每個使用者在顯示他們的 ID 時都會獲得密碼……這遠非完美,但比擁有每個人都知道的預設“密碼”要好得多。
顯然,大多數情況下,您將使用授權的 ssh 密鑰登錄遠端電腦,而根本不使用密碼……但 root 密碼對於在控制台(或使用 BMC 或其他遠端-管理設施)在緊急情況下。
(*) 由於此
passwords.txt
文件是純文字文件,因此您需要非常小心權限以及有權訪問它的人員,但這主要超出了本問答的範圍。我建議使用gpg
chmod 600
加密文件- 僅在需要使用時解密。我還建議將加密版本保存在或其他一些修訂控制系統中,這樣您就不會失去舊密碼的歷史記錄,以便在某些特定主機上由於某種原因密碼更新失敗(例如當時處於離線狀態)進行嘗試)git
或者使用pass來組合
gpg
和git
。