日常运维中最常用的 Ansible 命令主要是 ad-hoc 模式下的模块调用,适合快速批量执行命令、检查主机状态、分发文件等场景,不需要写 playbook 就能完成大部分临时任务。
先说结论:Ansible 常用命令围绕「主机 + 模块 + 参数」结构,掌握 5-6 个核心模块就能覆盖 80% 的日常运维需求。
- 适合:批量执行命令、检查主机连通性、快速分发配置
- 先看:ansible-doc 查看模块用法,避免参数写错
- 建议:生产环境先用-C 测试模式确认影响范围
命令速用版
以下是可以直接在 Ansible 控制节点执行的常用命令:
检查主机是否在线:
ansible all -m ping
批量执行系统命令:
ansible all -a 'date' ansible web -m command -a 'hostname'
查看模块帮助信息:
ansible-doc -l ansible-doc -s dnf
指定 inventory 文件执行:
ansible -i /path/to/hosts all -m ping
带详细输出执行:
ansible all -m shell -a 'df -h' -v
生产环境执行步骤
步骤 1:确认主机清单配置
检查/etc/ansible/hosts 或自定义 inventory 文件,确保目标主机已定义。可以用-i 参数指定非默认路径。
步骤 2:测试主机连通性
ansible all -m ping
返回 pong 表示 SSH 连接正常,这是执行其他命令的前提。
步骤 3:执行具体任务
根据需求选择模块:command 执行简单命令,shell 支持管道和特殊字符,copy 传输文件,service 管理服务状态,user 管理用户。
步骤 4:生产环境先测试
使用-C 或`--check` 参数测试命令会改变什么内容,不会真正执行,确认影响范围后再正式运行。
ansible all -m dnf -a 'name=httpd state=present' -C
结果验证方法
执行命令后观察返回状态:SUCCESS 表示执行成功,CHANGED 表示有变更,FAILED 表示失败。rc=0 表示命令返回码正常。
可以用以下命令二次验证:
ansible all -a 'whoami' ansible all -a 'uptime'
检查目标主机实际状态是否与预期一致,比如文件是否存在、服务是否运行、用户是否创建。
常见坑与版本兼容
command 模块不支持管道:command 模块无法使用|、>等 shell 特殊字符,需要管道时用 shell 模块。
-a 参数引号问题:参数后的命令建议用单引号,双引号在某些模块(如 user 模块)可能出问题。
默认 fork 数为 5:并发进程默认 5 个,大批量主机时可用-f 调整,但需考虑控制节点性能。
SSH 密钥配置:生产环境建议配置 SSH 密钥认证,避免每次输入密码,用-k 参数可临时提示输入。
模块版本差异:yum 模块在新版 Ansible 中已 deprecated,建议优先使用 dnf 模块(CentOS 8+/RHEL 8+)或通用 package 模块。script 模块执行的是 Ansible 管理机上的脚本,shell 模块执行的是远程主机上的命令,两者不要混淆。
版本兼容性说明:Ansible 2.10 之后核心模块集合有所调整,部分旧模块可能被标记为弃用。建议通过ansible `--version`确认当前版本,并参考官方文档确认模块可用性。
原文链接:https://www.zjcp.cc/ask/11140.html
