TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:
TOP云总站云服务器:https://topyun.vip/server/buy.html
TOP云C站云服务器:https://c.topyun.vip/cart
批量安装软件(如 Nginx、MySQL 等)
批量修改配置文件
批量启动/停止服务
批量收集服务器状态信息(如 CPU、内存、磁盘等)
批量执行自定义命令
通过 SSH 连接到每台服务器执行命令或脚本
使用循环结构遍历服务器列表
结合 expect 或 sshpass 实现免密登录(如果未配置 SSH 免密)
将脚本逻辑封装,支持参数化配置(如服务器 IP 列表、命令等)
Ubuntu/Debian 系统:
CentOS/RHEL 系统:
使用配置文件管理服务器信息
将服务器的 IP、用户名、密码等信息存储在一个配置文件中(如 JSON 或 YAML 格式),脚本读取配置文件进行批量操作。
可以结合 jq(处理 JSON)或 yq(处理 YAML)工具解析配置文件。
使用并行工具提高效率
如果服务器数量较多,串行执行脚本效率较低。可以使用 GNU parallel 或 xargs -P 实现并行操作。
示例(使用 xargs 并行执行):
cat server_list.txt | xargs -I {} -P 5 ssh username@{} "$COMMAND"
-P 5 表示同时最多运行 5 个进程。
结合 Ansible 等工具
如果批量管理的需求较复杂,建议使用 Ansible 等专业工具代替纯 Shell 脚本。Ansible 提供了更强大的功能,如 Playbook、模块化、错误处理等。
日志记录与错误处理
在脚本中添加日志记录功能,将每台服务器的执行结果输出到日志文件中,方便后续排查问题。
使用 >> 将输出重定向到日志文件:
ssh username@$SERVER "$COMMAND" >> batch_exec.log 2>&1
准备服务器列表(IP 地址或其他标识)
编写 Shell 脚本,使用 ssh 和 scp 连接到服务器并执行命令或脚本
如果未配置 SSH 免密登录,可以使用 sshpass(不推荐生产环境使用)
优化脚本,如支持配置文件、并行执行、日志记录等
在云服务器上编写 Shell 脚本进行批量管理,是一种常见且高效的自动化运维方式。通过 Shell 脚本,你可以批量执行命令、部署应用、管理配置、监控服务等。下面将详细介绍如何编写和使用 Shell 脚本进行云服务器的批量管理。
一、Shell 脚本批量管理的常见场景
二、Shell 脚本批量管理的基本思路
由于 Shell 脚本本身是在单个服务器上运行的,如果需要对多台云服务器进行批量管理,通常需要:
三、编写 Shell 脚本批量管理云服务器
下面以 批量在多台服务器上执行命令 为例,介绍如何编写一个简单的 Shell 脚本。
示例 1:批量在多台服务器上执行命令(假设已配置 SSH 免密登录)
1. 准备服务器 IP 列表
创建一个文件 server_list.txt,每行一个服务器 IP:
192.168.1.101 192.168.1.102 192.168.1.103
2. 编写 Shell 脚本 batch_exec.sh
#!/bin/bash
# 定义服务器列表文件
SERVER_LIST="server_list.txt"
# 定义要在远程服务器上执行的命令
COMMAND="uptime"
# 遍历服务器列表
for SERVER in $(cat $SERVER_LIST); do
echo "正在连接服务器: $SERVER"
# 使用 SSH 连接到服务器并执行命令
ssh username@$SERVER "$COMMAND"
if [ $? -eq 0 ]; then
echo "服务器 $SERVER 命令执行成功"
else
echo "服务器 $SERVER 命令执行失败"
fi
echo "----------------------------------"
done
替换 username 为你的服务器用户名(如 root 或自定义用户)。
3. 给脚本添加执行权限
chmod +x batch_exec.sh
4. 运行脚本
./batch_exec.sh
脚本会依次连接到 server_list.txt 中的每台服务器,并执行 uptime 命令,输出每台服务器的运行状态。
示例 2:批量在多台服务器上执行本地脚本(需配置 SSH 免密登录)
如果你希望将本地的 Shell 脚本分发到多台服务器上并执行,可以结合 scp 和 ssh 实现。
1. 准备本地脚本
假设你有一个本地脚本 local_script.sh,内容如下:
#!/bin/bash
echo "当前服务器时间: $(date)"
2. 编写批量分发并执行的脚本 batch_distribute.sh
#!/bin/bash
# 定义服务器列表文件
SERVER_LIST="server_list.txt"
# 定义本地脚本路径
LOCAL_SCRIPT="local_script.sh"
# 遍历服务器列表
for SERVER in $(cat $SERVER_LIST); do
echo "正在连接服务器: $SERVER"
# 使用 scp 将本地脚本复制到远程服务器的 /tmp 目录
scp $LOCAL_SCRIPT username@$SERVER:/tmp/
if [ $? -eq 0 ]; then
echo "脚本已成功复制到 $SERVER"
else
echo "脚本复制到 $SERVER 失败"
continue
fi
# 使用 ssh 在远程服务器上执行脚本
ssh username@$SERVER "bash /tmp/local_script.sh"
if [ $? -eq 0 ]; then
echo "服务器 $SERVER 脚本执行成功"
else
echo "服务器 $SERVER 脚本执行失败"
fi
echo "----------------------------------"
done
替换 username 为你的服务器用户名。
3. 给脚本添加执行权限
chmod +x batch_distribute.sh
4. 运行脚本
./batch_distribute.sh
脚本会将本地的 local_script.sh 分发到每台服务器的 /tmp 目录,并在远程服务器上执行该脚本。
示例 3:未配置 SSH 免密登录时使用 sshpass(不推荐在生产环境使用)
如果你的服务器尚未配置 SSH 免密登录,可以使用 sshpass 工具来自动输入密码。但需要注意,sshpass 存在密码泄露风险,不建议在生产环境中使用。
1. 安装 sshpass
在控制节点上安装 sshpass:
sudo apt install sshpass -y
sudo yum install epel-release -y
sudo yum install sshpass -y
2. 修改脚本以使用 sshpass
在之前的脚本中,将 ssh 和 scp 命令替换为 sshpass:
sshpass -p "your_password" ssh username@$SERVER "$COMMAND"
sshpass -p "your_password" scp $LOCAL_SCRIPT username@$SERVER:/tmp/
sshpass -p "your_password" ssh username@$SERVER "bash /tmp/local_script.sh"
替换 your_password 为服务器的实际密码。
⚠️ 注意:密码明文存储在脚本中存在安全风险,建议仅在测试环境中使用。
四、进阶优化建议
五、总结
通过 Shell 脚本批量管理云服务器的流程如下: