Password

如何定期更改root密碼

  • August 26, 2021

我有 60 個具有不同 root 密碼的系統。

每 3 個月我必須更改他們的密碼。

目前我必須手動登錄 60 個系統並提供 60 個不同的密碼。

有沒有聰明的方法來做到這一點?我可以將 Ansible 用於此類工作嗎?

一種方法是:

  1. 創建一個包含主機名和純文字 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

這真的很簡單和原始。沒有錯誤檢查。或記錄。但它確實展示瞭如何使用現有工具(如pwgenopenssl和 )以及chpasswd自動更改密碼的基本思想。

我曾經在一所大學裡每學期都使用與這些類似的腳本,在那裡我為特定課程的新生生成密碼,在這些課程中,需要對特定機器(與主網路隔離)的 shell 訪問。該列表被列印並切成條狀,每個使用者在顯示他們的 ID 時都會獲得密碼……這遠非完美,但比擁有每個人都知道的預設“密碼”要好得多。

顯然,大多數情況下,您將使用授權的 ssh 密鑰登錄遠端電腦,而根本不使用密碼……但 root 密碼對於在控制台(或使用 BMC 或其他遠端-管理設施)在緊急情況下。


(*) 由於此passwords.txt文件是純文字文件,因此您需要非常小心權限以及有權訪問它的人員,但這主要超出了本問答的範圍。

我建議使用gpgchmod 600加密文件- 僅在需要使用時解密。我還建議將加密版本保存在或其他一些修訂控制系統中,這樣您就不會失去舊密碼的歷史記錄,以便在某些特定主機上由於某種原因密碼更新失敗(例如當時處於離線狀態)進行嘗試)git

或者使用pass來組合gpggit

引用自:https://unix.stackexchange.com/questions/666324