最直接有效的方式是用 ping 模块执行 ad-hoc 命令,它不执行系统变更,仅验证 SSH 连通性与目标机 Python 环境;需确认 inventory 位置(默认 /etc/ansible/hosts,可用 -i 指定),正确定义主机或组(含 ansible_user/ansible_port 等必要字段),再运行 ansible all -m ping 等命令,成功返回 "pong",失败则按 SSH 免密、Python 版本、DNS 解析、防火墙及权限顺序排查。

最直接有效的方式是用 ping 模块 执行 ad-hoc 命令,它不执行任何系统变更,只验证 SSH 连通性与 Ansible Python 环境是否就绪。
确认 inventory 文件位置和内容
Ansible 默认读取 /etc/ansible/hosts,你也可以用 -i 显式指定路径(比如 ansible -i ./my_hosts ...)。确保文件中已正确定义主机或主机组,例如:
[webservers]192.168.1.10web02 ansible_host=192.168.1.11 ansible_user=deploy
若使用非 root 用户或自定义端口,inventory 中必须明确写清 ansible_user 和 ansible_port,否则 ping 会因权限或连接超时失败。
运行 ping 测试命令
在控制机上执行以下任一命令:
- 测试全部主机:
ansible all -m ping - 测试某个组(如 webservers):
ansible webservers -m ping - 测试单台主机:
ansible web02 -m ping - 指定自定义 inventory:
ansible all -i ./production -m ping
成功返回为 "ping": "pong";失败常见原因包括:SSH 免密未配置、目标主机防火墙拦截 22 端口、用户无 sudo 权限(部分环境需)、Python 在目标机缺失(Ansible 依赖 Python 2.7+/3.5+)。
排查常见失败场景
如果出现 UNREACHABLE! 或 FAILED!,按顺序检查:
- 手动 SSH 登录是否免密:
ssh user@host不输密码即进,才算通过基础验证 - 目标主机是否安装 Python:
ssh user@host 'python3 --version'或python --version - inventory 中主机名/IP 能否被 DNS 或 /etc/hosts 正确解析
- 是否因 SELinux 或防火墙(如 firewalld)阻止了 SSH 连接
遇到权限类报错(如 Permission denied),优先检查 ansible_user 设置是否匹配目标机实际账户,以及该账户是否具备执行基本命令的权限。
进阶:带调试信息运行
加 -vvv 可查看完整连接过程,定位卡在哪一步:
-
ansible webservers -m ping -vvv—— 显示 SSH 连接细节、认证方式、远程临时目录创建等 - 配合 --limit 可跳过部分主机做定向测试:
ansible all -m ping --limit "web01,db01"
不需要额外安装客户端,也不依赖后台服务,只要 SSH 通、Python 有、权限对,ping 就能回响。


















