TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:

TOP云总站云服务器:https://topyun.vip/server/buy.html

TOP云C站云服务器:https://c.topyun.vip/cart

    在云服务器上编写 Shell 脚本进行批量管理,是一种常见且高效的自动化运维方式。通过 Shell 脚本,你可以批量执行命令、部署应用、管理配置、监控服务等。下面将详细介绍如何编写和使用 Shell 脚本进行云服务器的批量管理。


    一、Shell 脚本批量管理的常见场景

    • 批量安装软件(如 Nginx、MySQL 等)

    • 批量修改配置文件

    • 批量启动/停止服务

    • 批量收集服务器状态信息(如 CPU、内存、磁盘等)

    • 批量执行自定义命令


    二、Shell 脚本批量管理的基本思路

    由于 Shell 脚本本身是在单个服务器上运行的,如果需要对多台云服务器进行批量管理,通常需要:

    1. 通过 SSH 连接到每台服务器执行命令或脚本

    2. 使用循环结构遍历服务器列表

    3. 结合 expect 或 sshpass 实现免密登录(如果未配置 SSH 免密)

    4. 将脚本逻辑封装,支持参数化配置(如服务器 IP 列表、命令等)


    三、编写 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:

    • Ubuntu/Debian 系统:

    sudo apt install sshpass -y
    • CentOS/RHEL 系统:

    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 为服务器的实际密码。

    ⚠️ 注意:密码明文存储在脚本中存在安全风险,建议仅在测试环境中使用。


    四、进阶优化建议

    1. 使用配置文件管理服务器信息

      • 将服务器的 IP、用户名、密码等信息存储在一个配置文件中(如 JSON 或 YAML 格式),脚本读取配置文件进行批量操作。

      • 可以结合 jq(处理 JSON)或 yq(处理 YAML)工具解析配置文件。

    2. 使用并行工具提高效率

      • 如果服务器数量较多,串行执行脚本效率较低。可以使用 GNU parallel 或 xargs -P 实现并行操作。

      • 示例(使用 xargs 并行执行):

        cat server_list.txt | xargs -I {} -P 5 ssh username@{} "$COMMAND"

        -P 5 表示同时最多运行 5 个进程。

    3. 结合 Ansible 等工具

      • 如果批量管理的需求较复杂,建议使用 Ansible 等专业工具代替纯 Shell 脚本。Ansible 提供了更强大的功能,如 Playbook、模块化、错误处理等。

    4. 日志记录与错误处理

      • 在脚本中添加日志记录功能,将每台服务器的执行结果输出到日志文件中,方便后续排查问题。

      • 使用 >> 将输出重定向到日志文件:

        ssh username@$SERVER "$COMMAND" >> batch_exec.log 2>&1

    五、总结

    通过 Shell 脚本批量管理云服务器的流程如下:

    1. 准备服务器列表(IP 地址或其他标识)

    2. 编写 Shell 脚本,使用 ssh 和 scp 连接到服务器并执行命令或脚本

    3. 如果未配置 SSH 免密登录,可以使用 sshpass(不推荐生产环境使用)

    4. 优化脚本,如支持配置文件、并行执行、日志记录等



不容错过
Powered By TOPYUN 云产品资讯