当前位置: 首页 > news >正文

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

相关文章:

  • 代码随想录算法训练营第三十四天
  • 数据库补充知识
  • 【Redis】哨兵机制和集群
  • k8s 中 deployment 管理的多个 pod 构成集群吗
  • 技术视界|青龙机器人训练地形详解(二):添加地形到训练环境
  • Flutter TabBar / TabBarView 详解
  • 办公学习 效率提升 超级PDF处理软件 转换批量 本地处理
  • 重新定义高性能:Hyperlane —— Rust生态中的极速HTTP服务器
  • QMK键盘固件配置详解
  • Azure OpenAI 聊天功能全解析:Java 开发者指南
  • uniapp 震动功能实现
  • AKS 网络深入探究:Kubenet、Azure-CNI 和 Azure-CNI(overlay)
  • 2025年渗透测试面试题总结-网络安全、Web安全、渗透测试笔试总结(一)(附回答)(题目+回答)
  • 【卡特兰数】不同的二叉搜索树
  • Spring 如何解决循环依赖问题?
  • 大模型时代的数据治理与数据资产管理研究方向
  • nginx之proxy_redirect应用
  • 数据结构之栈与队列
  • uniapp tabBar 中设置“custom“: true 在H5和app中无效解决办法
  • uniapp-商城-43-shop 后台管理 页面
  • 泰特现代美术馆25年:那些瞬间,让艺术面向所有人
  • 中国一重集团有限公司副总经理陆文俊被查
  • 习近平抵达莫斯科伏努科沃专机机场发表书面讲话(全文)
  • 成立6天的公司拍得江西第三大水库20年承包经营权,当地回应
  • 苏丹宣布与阿联酋断交
  • 世界银行最新营商环境体检单:59个测评点,上海22项达全球最优水平