直接deepseek幫寫腳本?remoteReboot.sh
#!/bin/bash
# 配置文件路徑(格式:每行一個服務器地址)
SERVER_FILE="servers.list"
# 讀取服務器列表
mapfile -t SERVERS < "$SERVER_FILE"
for server in "${SERVERS[@]}"; do
? echo "正在處理: $server"
? #ssh -o ConnectTimeout=5 "mission@$server" "sudo -A shutdown -r '系統計劃維護重啟'"
? ssh -o ConnectTimeout=5 "mission@$server" "sudo -A reboot"?
? if [ $? -eq 0 ]; then
? ? echo "$server 重啟計劃設置成功"
? else
? ? echo "$server 連接失敗" >&2
? fi
done
上面注釋的ssh -o ConnectTimeout=5 "mission@$server" "sudo -A shutdown -r '系統計劃維護重啟'" 經測試,報錯?sudo: 沒有指定 askpass 程序,嘗試設置 SUDO_ASKPASS
但我已經設置過了,而用下面的reboot則功能正常。
設置ssh自動登錄免密碼
在本機上執行
# 生成密鑰對(如果尚未生成)
ssh-keygen -t rsa
# 將公鑰復制到目標服務器
ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.1.101
ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.1.102
再ssh user@192.168.1.101測試下是否免密碼成功,第一次不成功就先手動輸入一次密碼
后面就不用再輸入密碼了
在目標服務器,還要設置SUDO_ASKPASS 環境變量,這樣遠程登錄時系統就會調用它指向的命令去輸入密碼
vi? .bashrc
export SUDO_ASKPASS=/home/mission/StationPisPlayer/printpwd
/home/mission/StationPisPlayer/printpwd執行就會輸出密碼
經測試有的機器還是不行,還是報錯?sudo: 沒有指定 askpass 程序,嘗試設置 SUDO_ASKPASS
在目標服務器上sudo vi /etc/sudoers
user ALL=(ALL) NOPASSWD: /sbin/reboot
這里的user是服務器的用戶名