[英]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.