Ansible ad-hoc是通过命令行快速执行单个临时任务的方式,适用于连通性测试、状态检查、服务启停等轻量操作;其核心语法为ansible -m -a "",依赖SSH免密登录、目标端Python环境及Inventory配置。

在 Linux 中使用 Ansible 执行 ad-hoc 任务,本质是通过 ansible 命令行工具,对一组目标主机快速运行单个模块或命令,无需编写 Playbook。它适合临时检查、调试、批量启停服务或同步文件等轻量操作。
准备前提:控制节点与连接就绪
确保你已在 Ubuntu(或其他支持系统)上完成 Ansible 安装,并配置好 SSH 免密登录到目标主机。Ansible 不要求被控端安装任何代理,但需满足:
- 目标主机开启 SSH 服务,且控制节点能通过 SSH 登录(推荐使用密钥认证)
- 目标主机已安装 Python(2.7 或 3.5+),用于执行模块逻辑
- Inventory 文件(如
/etc/ansible/hosts或自定义路径)中正确定义了主机或主机组
基本语法与常用选项
ad-hoc 命令核心结构为:
ansible [选项] -m -a ""
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
关键选项说明:
-
-i PATH:指定 Inventory 文件路径,例如
-i ./my_hosts;不加则默认读取/etc/ansible/hosts -
-m MODULE:指定要调用的模块,如
ping、command、shell、copy、service等 - -a 'ARGS':传入模块所需参数,注意带空格时用引号包裹
-
-u USER:以指定用户登录目标主机(如
-u deploy) -
--become:提权执行(等效于 sudo),常配合
--become-user=root和-K(交互输密码)使用 - -f NUM:设置并发数,默认 5,高可用环境可设为 10 或 20 加速执行
- --list-hosts:仅列出匹配的主机,不执行任务,调试时很有用
几个高频实用示例
以下命令均假设 Inventory 中已定义组 webservers,含三台主机:
- 测试连通性:
ansible webservers -m ping→ 返回"ping": "pong"表示 SSH 与模块就绪 - 查看所有 Web 主机内核版本:
ansible webservers -m command -a "uname -r" - 重启 nginx 服务(需提权):
ansible webservers -m service -a "name=nginx state=restarted" --become - 从本地复制配置文件到远程:
ansible webservers -m copy -a "src=./nginx.conf dest=/etc/nginx/nginx.conf backup=yes" - 在特定主机上运行带管道的复杂命令(用
shell模块):ansible db01 -m shell -a "ps aux | grep postgres | wc -l"
如何确认执行结果与状态含义
Ansible 输出会按主机逐条返回,颜色提示语义明确:
-
绿色(如
webservers | SUCCESS):任务成功,且未改变系统状态("changed": false) -
黄色(
"changed": true):任务成功并实际修改了目标(如创建文件、重启服务) -
红色(
UNREACHABLE或FAILED):连接失败或模块报错,需检查网络、权限、参数拼写或目标端 Python 环境
加 -v 可看详细输出,-vvv 则显示完整调试信息,包括传输的临时脚本路径和 stderr 内容。

















