簡體   English   中英

使用啟用了密碼的sudo帳戶更改root密碼身份驗證的腳本

[英]Script to change root password authenticating with password enabled sudo account

我想更改多個服務器的root密碼。 我將shell與for循環和chpasswd實用程序一起使用。 由於sudo帳戶已啟用密碼,因此我每次退出腳本時都在提示sudo密碼。

下面是bash腳本是用bash編寫的。 但總是提示輸入密碼。

#!/bin/bash
pass="PASSWORD"

for i in $(cat serverlist)

do

ssh -t sudouser@$i "sudo chpasswd <<EOF

root:"$pass"

EOF" ;

done

完全自動化的bash更改根密碼。

我也認為您應該使用expect 我編寫的腳本尚未經過全面測試,因為我沒有可用於更改密碼的服務器:-)

#!/bin/bash

read -p "Server username? " USERNAME
read -sp "Server password for ${USERNAME}? " PASSWORD

echo
read -p "Name of file containing server list? " S_FILE
read -p "User to change on servers? " S_USERNAME
read -sp "New password for user ${S_USERNAME}?" S_PASSWORD
echo

while IFS= read -r SERVER; do
        [ ! -z "${SERVER}" ] || continue
        expect <<-EOF
                spawn ssh ${USERNAME}@${SERVER}
                expect "*: " { send "${PASSWORD}\r" }
                expect "*$ " { send "echo '${S_USERNAME}:${S_PASSWORD}' | sudo chpasswd\r" }
                expect "*: " { send "${PASSWORD}\r" }
                expect "*$ " { send "exit\r" }
EOF
        echo
done < ${S_FILE}
exit $?

編寫腳本來執行無人看管的根本事情很危險。 您所需要的只是一台機器,其行為與您預期的有所不同,並且您的自動化方法行不通。 更糟糕的是,您可能會陷入某種糟糕的狀態,甚至可能沒有意識到任何錯誤。

這聽起來非常適合csshx (或類似的東西)。 使用它可以在多個主機上並行並行應用所需的任何更改。 例如,您可以一次連接到16個主機,如下所示:

csshx host[1-16]

然后鍵入命令並監視每個主機的輸出。

如果由於您擁有的計算機數量而使這似乎不可行,那么我會反駁說,這比編寫腳本要安全得多,而且-即使“慢”-花費的總時間也可能比嘗試創建自動化解決方案要少得多。 ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM