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

相关推荐
慌ZHANG4 分钟前
Python在自动化与运维领域的核心角色:工具化、平台化与智能化
运维·自动化
jc06201 小时前
Linux c网络专栏第四章io_uring
linux·运维·服务器
2401_858286111 小时前
OSE1.【Linux】练习题组1
linux·运维·服务器
维尔切2 小时前
Linux初学者在CentOS 7虚拟机中rpm、yum、dnf的操作练习
linux·运维·centos
liweiweili1262 小时前
在 Linux 中,定时任务(cron)
linux·运维·服务器
星期天要睡觉2 小时前
Linux零基础Shell教学全集(可用于日常查询语句,目录清晰,内容详细)(自学尚硅谷B站shell课程后的万字学习笔记,附课程链接)
linux·运维·shell
IT成长日记2 小时前
【自动化运维神器Ansible】Ansible常用模块之cron模块详解
运维·自动化·ansible·cron·cron模块·常用模块
夕泠爱吃糖3 小时前
Linux虚拟内存
linux·运维·服务器
宇钶宇夕3 小时前
图像处理第二篇:初级篇 —— 选择镜头的基础知识及对图像处理的影响
运维·数码相机·程序人生·自动化
aini_lovee3 小时前
python命令行解析模块argparse
服务器·前端·数据库