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

相关推荐
考虑考虑7 小时前
cmd局部设置java变量
运维·后端·自动化运维
我爱吃土豆17 小时前
AI 编程工具远程开发指南:Codex 桌面版与 WorkBuddy 通过 SSH 连接云服务器实践
服务器·人工智能·ssh
生活爱好者!7 小时前
哇!影视新玩法!docker部署NEOWATCH NAS
运维·docker·容器
一技安身8 小时前
【信创】银河麒麟V10、统信UOS解压7Z文件
linux·运维·服务器
迷途呀8 小时前
CI/CD 自动化部署实践:让代码提交后自动上线
linux·运维·nginx·ci/cd·自动化
闲云自留地9 小时前
动手玩 Nova:Hypervisor、主机聚合、可用分区、虚拟机生命周期实操
运维·架构·openstack
binqian9 小时前
【linux】OpenSSH升级文档
linux·运维·网络
吴声子夜歌9 小时前
Shell编程——if条件语句
linux·运维·shell
和裕10 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
Dawn-bit10 小时前
Linux 运维基础扩展:跳板机、堡垒机与物理服务器全流程
linux·运维·服务器·云计算·运维开发