You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量在多台Ubuntu服务器上部署Shell脚本的最优方案咨询

嗨,这个场景我太熟了——要给100多台Ubuntu服务器批量部署Shell脚本,手动逐个登录绝对是噩梦!下面几个都是生产环境里常用的高效方案,你可以根据自己的需求选:

1. 轻量快速:用SSH批量工具(pssh/parallel-ssh)

如果只是一次性部署,不想搞复杂的配置管理,这个方法最省心。

步骤:

  • 先在你的控制机(就是你自己操作的那台机器)上安装pssh:
    sudo apt install pssh
    
  • 准备一个服务器列表文件hosts.txt,每行写清楚登录用户和服务器IP,比如:
    ubuntu@192.168.1.10
    ubuntu@192.168.1.11
    # 剩下的服务器依次往下加
    
  • 把你的脚本deploy.sh批量推送到所有服务器的临时目录:
    pscp -h hosts.txt deploy.sh /tmp/
    
  • 最后批量给脚本加执行权限并运行:
    pssh -h hosts.txt "chmod +x /tmp/deploy.sh && /tmp/deploy.sh"
    

优缺点:

  • ✅ 优点:零复杂配置,安装即用,并发执行速度快
  • ❌ 缺点:没有状态管理,中途失败得手动排查;必须提前配置SSH免密登录(不然要输一百次密码,懂的都懂)

2. 生产环境首选:用Ansible做配置管理

如果以后还要做重复部署、服务器状态维护,Ansible绝对是最佳选择——它不仅能部署脚本,还能帮你管理整个服务器的配置,而且是无代理的,不需要在目标服务器装额外软件。

步骤:

  • 控制机安装Ansible:
    sudo apt install ansible
    
  • 准备一个inventory文件hosts.ini,用来定义你的服务器集群:
    [ubuntu_servers]
    192.168.1.10 ansible_user=ubuntu
    192.168.1.11 ansible_user=ubuntu
    # 其他服务器继续添加
    
  • 写一个简单的Playbook(deploy_script.yml),描述部署流程:
    - name: 批量部署Shell脚本到Ubuntu服务器
      hosts: ubuntu_servers
      become: yes  # 如果脚本需要root权限,加上这行
      tasks:
        - name: 把脚本复制到目标服务器的可执行目录
          copy:
            src: ./deploy.sh
            dest: /usr/local/bin/deploy.sh
            mode: '0755'  # 直接设置执行权限
    
        - name: 执行脚本并记录输出
          command: /usr/local/bin/deploy.sh
          register: script_result
    
        - name: 打印每台服务器的执行结果
          debug:
            var: script_result.stdout_lines
    
  • 运行Playbook开始部署:
    ansible-playbook -i hosts.ini deploy_script.yml
    

优缺点:

  • ✅ 优点:幂等性(重复运行不会出问题),自带日志和错误排查,能处理复杂场景(比如先安装脚本依赖、修改配置文件),可复用性强
  • ❌ 缺点:需要学一点YAML语法,但入门非常简单,花10分钟就能写个基本的Playbook

3. 零依赖应急方案:原生Shell循环+SSH

如果不想装任何额外工具,用系统自带的Shell就能搞定,适合临时应急。

步骤:

  • 先确保控制机能免密登录所有服务器(提前用ssh-keygen生成密钥,再用ssh-copy-id批量传到目标服务器)
  • 写一个批量处理的Shell脚本batch_deploy.sh:
    #!/bin/bash
    # 服务器列表文件路径
    HOSTS="./hosts.txt"
    # 要部署的脚本路径
    TARGET_SCRIPT="./deploy.sh"
    
    # 循环处理每台服务器
    while read -r host; do
        echo "=== 正在处理服务器: $host ==="
        # 复制脚本到目标服务器
        scp "$TARGET_SCRIPT" "$host:/tmp/"
        # 登录服务器执行脚本
        ssh "$host" "chmod +x /tmp/deploy.sh && /tmp/deploy.sh"
        echo "=== 服务器 $host 处理完成 ==="
    done < "$HOSTS"
    
  • 给这个脚本加执行权限并运行:
    chmod +x batch_deploy.sh && ./batch_deploy.sh
    

优缺点:

  • ✅ 优点:完全零依赖,不用装任何软件
  • ❌ 缺点:串行执行,100台服务器会很慢;没有并发,失败了要手动跳过或重新执行

重要前置准备

不管用哪种方法,一定要先配置SSH免密登录!不然你会在输密码的过程中崩溃。快速配置方法:

  1. 在控制机生成密钥(一路回车就行):
    ssh-keygen -t ed25519
    
  2. 用pssh批量把公钥传到所有服务器:
    pssh -h hosts.txt "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_ed25519.pub
    

另外,先拿1-2台测试服务器跑一遍脚本,确保脚本本身没问题,再批量执行——不然100台一起出问题就麻烦了!

内容的提问来源于stack exchange,提问作者Sugu kannan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:00:24