批量在多台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免密登录!不然你会在输密码的过程中崩溃。快速配置方法:
- 在控制机生成密钥(一路回车就行):
ssh-keygen -t ed25519 - 用pssh批量把公钥传到所有服务器:
pssh -h hosts.txt "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_ed25519.pub
另外,先拿1-2台测试服务器跑一遍脚本,确保脚本本身没问题,再批量执行——不然100台一起出问题就麻烦了!
内容的提问来源于stack exchange,提问作者Sugu kannan
相关产品推荐
相关产品推荐

