安全地重啟多個遠端伺服器上的服務

安全地重啟多個遠端伺服器上的服務

我需要編寫一個腳本,以便我和我的同事可以在多個伺服器上重新啟動不同的服務。我們都使用 LDAP 連接到伺服器,因此我希望我的腳本將 LDAP 使用者連接到伺服器,然後使用 sudo 重新啟動服務(我可以在每個伺服器上編寫腳本來重新啟動所需的所有服務)。現在腳本只需執行以下命令

ssh -t user@host "sudo service XXX restart" 

問題是,對於每台伺服器,腳本都會詢問使用者密碼兩次(一次用於 ssh 連接,兩次用於 sudo 命令)。我的第一個猜測是使用 read -s -p 提示使用者輸入登入名稱和密碼,然後使用變數自動透過 ssh 登入。顯然,Expect 是執行此操作的方法,但我沒有找到一種方法可以在 Expect 腳本中安全地提示密碼,或者在 bash 腳本中提示密碼並在 Expect 腳本中安全地傳遞變數。

我確實查找了像 pssh、cluster ssh 這樣的解決方案,它們似乎可以工作,但不能與 sudo 一起使用。我知道最好的方法是使用 ssh 金鑰,但由於多個使用者需要使用該腳本,我想使用 LDAP 登入名稱/密碼。

答案1

正如 Glenn 在評論中所建議的那樣,正確的方法是使用 stty :

# grab the password
stty -echo
send_user -- "Password for $user@$host: "
expect_user -re "(.*)\n"
send_user "\n"
stty echo
set pass $expect_out(1,string)

#... later
send -- "$pass\r"

相關內容