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

相关推荐
Tim风声(网络工程师)1 小时前
不同射频对应不同mac地址(查找无线用户连接AP信息)
服务器·网络·tcp/ip·智能路由器·无线ap
JosieBook3 小时前
【远程运维】Linux 远程连接 Windows 好用的软件:MobaXterm 实战指南
linux·运维·windows
鳄鱼杆5 小时前
服务器 | Docker应用开发与部署的实践以及阿里云镜像加速配置
服务器·阿里云·docker
羚羊角uou5 小时前
【Linux】命名管道
linux·运维·服务器
IT 小阿姨(数据库)5 小时前
PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
linux·运维·数据库·sql·postgresql·centos
曾经的三心草5 小时前
Python2-工具安装使用-anaconda-jupyter-PyCharm-Matplotlib
android·java·服务器
逍遥浪子~6 小时前
docker实践(一)
运维·docker·容器
AI云原生6 小时前
如何使用Docker快速运行Firefox并实现远程访问本地火狐浏览器的教程
运维·docker·云原生·容器·serverless·firefox·kubeless
今生相伴9916 小时前
ELFK:企业级日志管理的完整解决方案——从入门到精通
运维·elk·elasticsearch
码出钞能力7 小时前
更换libc.so导致linux变砖,通过LD_PRELOAD挽救
linux·服务器