0

0

Linux如何实现批量服务器关机?编写脚本批量执行shutdown命令的方法

雪夜

雪夜

发布时间:2025-09-05 08:18:01

|

863人浏览过

|

来源于php中文网

原创

答案:批量关机需准备服务器列表、配置SSH免密登录、确保用户有sudo权限、验证列表准确性并提前通知相关人员。

linux如何实现批量服务器关机?编写脚本批量执行shutdown命令的方法

在Linux环境下实现批量服务器关机,最直接且高效的方法是结合SSH(Secure Shell)与Bash脚本。核心思路是利用SSH的远程执行能力,通过一个预先编写好的脚本,遍历一个服务器列表,对列表中的每一台服务器执行

shutdown
命令。这不仅省去了手动登录的繁琐,还能有效管理大规模的关机操作。

解决方案

要实现批量服务器关机,我们需要一个包含目标服务器列表的文件,以及一个能够通过SSH连接并执行关机命令的Bash脚本。

步骤一:准备服务器列表文件

创建一个名为

servers.txt
的文件,每行写入一台目标服务器的IP地址或主机名。

server1.example.com
192.168.1.10
another-server
# 这是一条注释,脚本会忽略

步骤二:配置SSH免密登录

这是关键一步。为了让脚本能够无交互地连接到每台服务器,你需要设置SSH密钥对,并将公钥分发到所有目标服务器上。

  1. 在执行脚本的机器上生成SSH密钥对(如果还没有):
    ssh-keygen -t rsa -b 4096

    一路回车即可,或根据提示设置密码(但为了自动化,通常不设置)。

  2. 将公钥(
    ~/.ssh/id_rsa.pub
    )复制到所有目标服务器的
    ~/.ssh/authorized_keys
    文件中。可以使用
    ssh-copy-id
    工具
    ssh-copy-id user@server1.example.com
    ssh-copy-id user@192.168.1.10
    # ... 对所有服务器重复此操作

    其中

    user
    是你在目标服务器上的用户名。

步骤三:编写批量关机脚本

创建一个名为

batch_shutdown.sh
的脚本文件,并添加执行权限。

酷兔AI论文
酷兔AI论文

专业原创高质量、低查重,免费论文大纲,在线AI生成原创论文,AI辅助生成论文的神器!

下载
#!/bin/bash

# 定义服务器列表文件路径
SERVER_LIST="servers.txt"
# 定义SSH连接的用户,确保这个用户在目标服务器上拥有sudo权限
SSH_USER="your_remote_user" 

# 检查服务器列表文件是否存在
if [ ! -f "$SERVER_LIST" ]; then
    echo "错误:服务器列表文件 '$SERVER_LIST' 不存在。请创建并填充它。"
    exit 1
fi

echo "--- 开始批量关机操作 ---"
echo "请确保已配置SSH免密登录,且用户 '$SSH_USER' 在目标服务器上拥有sudo关机权限。"
echo ""

# 逐行读取服务器列表
while IFS= read -r server; do
    # 跳过空行和以#开头的注释行
    if [[ -z "$server" || "$server" =~ ^# ]]; then
        continue
    fi

    echo "尝试连接并关机服务器: $server"

    # 使用ssh执行远程命令
    # -o BatchMode=yes 避免交互式提示
    # -o ConnectTimeout=10 设置连接超时时间,避免长时间等待无响应的服务器
    # sudo shutdown -h now 表示立即关机并关闭电源
    ssh -o BatchMode=yes -o ConnectTimeout=10 "$SSH_USER@$server" "sudo shutdown -h now"

    # 检查SSH命令的退出状态
    if [ $? -eq 0 ]; then
        echo "✅ 成功向 $server 发送关机指令。"
    else
        echo "❌ 警告:无法对 $server 执行关机操作。请检查SSH连接、用户权限或网络连通性。"
    fi
    echo "------------------------"
    sleep 1 # 稍微暂停一下,避免请求过于频繁,也方便观察输出
done < "$SERVER_LIST"

echo "--- 批量关机操作完成 ---"
echo "请注意,脚本仅发送了关机指令,服务器实际关机需要一定时间。"

步骤四:赋予脚本执行权限并运行

chmod +x batch_shutdown.sh
./batch_shutdown.sh

运行脚本后,它会逐一尝试连接列表中的服务器,并发送关机指令。你会看到每台服务器的执行结果,这有助于你了解哪些服务器成功关机,哪些可能遇到了问题。

批量关机前,我们应该做哪些准备工作?

在按下那个执行键之前,我个人觉得,谨慎和周全的准备比什么都重要。毕竟,关机不是小事,尤其是在生产环境中。

首先,SSH免密登录是基石。前面提到了配置方法,但要确保的是,你用来执行脚本的用户,在所有目标服务器上都拥有对应的公钥,并且

authorized_keys
文件的权限设置正确(通常是
600
)。如果密钥不对,或者目标服务器上的SSH服务没跑起来,那脚本根本连不上。

其次,

sudoers
文件配置至关重要。即使SSH能连上,如果远程用户没有执行
shutdown
命令的
sudo
权限,或者每次执行都需要输入密码,那自动化就无从谈起。最常见的做法是在
/etc/sudoers
文件中(通过
visudo
命令编辑,千万不要直接编辑)添加一行,允许你的SSH用户免密执行
shutdown

your_remote_user ALL=(ALL) NOPASSWD: /sbin/shutdown

这里的

your_remote_user
就是你在脚本中定义的
SSH_USER
。当然,出于安全考虑,更精细的控制是只允许执行特定参数的
shutdown
命令,比如
NOPASSWD: /sbin/shutdown -h now

再来,服务器列表的准确性。这个

servers.txt
文件,可不能马虎。确保里面列出的IP地址或主机名都是最新的、正确的、且可解析的。我见过因为列表里多了一个测试机或者少了一个关键服务,导致生产事故的。建议在执行前,先
ping
一下列表里的所有服务器,或者用
ssh -q -o BatchMode=yes -o ConnectTimeout=5 "$SSH_USER@$server" exit
来测试一下SSH连通性。

然后,通知与协调。除非是在维护窗口内,否则大规模关机必须提前通知所有相关人员,包括业务方、运维团队、开发团队等。明确关机时间、预计恢复时间以及可能的影响。避免出现业务突然中断,大家手忙脚乱的情况。

最后,也是

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1350

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

704

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

776

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

573

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.07.20

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

297

2023.07.20

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

381

2023.07.25

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号