Ansible 同步脚本到 Linux 服务器需确保连通性、Python 环境与 Inventory 配置,推荐用 copy 模块分发可执行脚本并设权限,script 模块适用于临时执行,template 模块用于动态生成带变量的脚本,同步后需显式调用 command/shell 执行。

用 Ansible 同步脚本到 Linux 服务器,核心是把本地脚本文件可靠、可控、可复现地分发到目标主机,并确保权限、路径和执行环境正确。这不是简单“复制粘贴”,而是借助 Ansible 的幂等性与模块化能力,实现安全、批量、可审计的同步。
确认控制节点与目标主机已连通
这是所有操作的前提:
- 控制机(装有 Ansible)能通过 SSH 免密登录目标服务器(推荐使用密钥对,
ssh-copy-id分发公钥) - 目标服务器已安装 Python(3.5+ 或 2.7),且能正常运行远程命令
- Inventory 文件(如
inventory.yml)中已正确定义目标主机或主机组,例如:
webservers:
hosts:
web01:
ansible_host: 192.168.1.10
用 copy 模块同步单个脚本文件
适用于分发启动脚本、巡检脚本、备份脚本等小体积可执行文件:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 在 Playbook 中使用
copy模块指定源路径(相对或绝对)、目标路径、权限和属主 - 示例任务(保存为
sync-script.yml):
- name: Sync backup.sh to /opt/scripts/
copy:
src: ./files/backup.sh
dest: /opt/scripts/backup.sh
mode: '0755'
owner: root
group: root -
src是控制机上的路径(支持相对路径,建议放在files/目录下);dest是目标机上的绝对路径 -
mode: '0755'确保脚本可执行,避免后续执行报 “Permission denied”
用 script 模块直接运行本地脚本(无需先同步)
适合一次性调试或轻量部署,Ansible 会自动上传并执行,但不保留副本:
-
script模块只接受本地脚本(不能是 Jinja2 模板),且不支持传参(如需参数,改用command+copy组合) - 示例:
- name: Run init-db.sh on target
script: files/init-db.sh - 脚本会在目标机临时目录执行,执行完即清理 —— 不适合需要长期留存的脚本
用 template 模块同步带变量的脚本
当脚本内容需根据环境动态生成(比如填入 IP、端口、路径),用 template 更安全灵活:
- 将脚本写成 Jinja2 模板(如
files/deploy.j2),内含{{ ansible_fqdn }}、{{ app_port }}等变量 - Playbook 中调用:
- name: Deploy templated deploy.sh
template:
src: files/deploy.j2
dest: /usr/local/bin/deploy.sh
mode: '0700'
owner: deploy - 变量可来自
group_vars/、host_vars/或 Playbookvars,实现“一份模板,多环境生成”
不复杂但容易忽略:同步后若需立即执行,别忘了加 command 或 shell 任务,并注意路径、用户权限和环境变量隔离问题。

















