Ansible Ad-hoc模式是用于快速批量执行临时任务的命令行模式,不保存、不写剧本,依赖SSH免密、正确inventory和已安装Ansible;命令格式为ansible <目标> -m <模块> -a <参数>,常用command/shell/copy/ping等模块。

Ansible 的 Ad-hoc 模式就是为“快速执行、即用即走”的批量操作而生。它不写剧本、不存记录,一条命令发出去,所有目标主机立刻响应——适合巡检、重启服务、查日志、同步配置等高频轻量任务。
确保基础环境就绪
Ad-hoc 能跑起来,依赖三个硬条件:SSH 免密通、主机清单可识别、控制节点装好 Ansible。
- 所有受控主机必须能被控制节点 SSH 免密登录(
ssh user@host直连不输密码); - 主机清单(默认
/etc/ansible/hosts)要分组清晰,比如:[web]192.168.10.10192.168.10.11 - 建议关闭首次连接的 key 检查(
host_key_checking = False),避免交互阻塞; - 非标准端口或用户需在 inventory 中显式声明,例如:
192.168.10.12 ansible_port=2222 ansible_user=ops。
掌握核心命令结构
Ad-hoc 命令本质是模块调用,格式固定:
ansible <主机组或主机> -m <模块名> -a <参数> [-i <inventory路径>]
-
-m后跟模块名,最常用的是command(执行简单命令,不支持管道/重定向)、shell(支持完整 shell 特性); -
-a后是模块参数,注意带空格或特殊字符时用单引号包裹; - 省略
-i则默认读取/etc/ansible/hosts; - 想看模块帮助?运行
ansible-doc -m shell或ansible-doc -l | grep user。
高频场景与实用示例
日常运维中,这几类命令用得最多:
-
状态检查:
ansible web -m ping(验证连通性);ansible all -m command -a 'uptime'(查看各机负载); -
文件操作:
ansible db -m copy -a 'src=/tmp/backup.sql dest=/var/backups/';ansible app -m file -a 'path=/opt/app/logs state=directory mode=755'; -
服务管理:
ansible web -m service -a 'name=httpd state=restarted enabled=yes'; -
软件安装:
ansible all -m yum -a 'name=htop state=present'(CentOS/RHEL);ansible all -m apt -a 'name=nginx state=latest'(Ubuntu/Debian); -
安全加固:
ansible all -m user -a 'name=audit state=present shell=/sbin/nologin'。
提升执行效率与可靠性
批量操作不是只求“跑起来”,更要稳、快、可追溯:
- 加
-f N控制并发数(默认 5),比如-f 20加速大批量主机响应; - 设超时:
-T 30表示单台主机最长等待 30 秒,避免卡死; - 失败处理:
--one-line输出精简结果,--limit可跳过故障节点继续执行; - 输出日志:
log_path = /var/log/ansible.log在ansible.cfg中开启,便于事后回溯; - 敏感操作前先用
--check(仅检查,不变更),尤其搭配file、copy等模块。

















