shell脚本实现远程重启多个服务器

直接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是服务器的用户名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值