介绍
校验两点:
- SSH登录能否成功
- 受控节点有可用Python解释器
模块全名:ansible.builtin.ping,属于内置核心模块,Linux/类Unix主机使用
重点:不是 ICMP ping! 不是网络层 ping
原理
- Ansible 通过 SSH 连接目标主机
- 将ping模块脚本传输到远程主机执行
- 在远程主机尝试调用Python,验证Python环境可用
- 成功返回
pong;失败抛出异常(SSH拒绝、密码错误、无Python、权限不足等)
返回值
ping:字符串,成功默认返回"pong"changed: false:ping模块不会修改远程主机任何文件/状态,永远不会产生变更ansible_facts:顺带返回远程主机Python解释器信息(discovered_interpreter_python)
成功示例输出:
192.168.1.100 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
例子:指定ip列表
注意: 必须有 , 否则报错,有 , 表示列表
ansible all -i 192.168.58.138, -m ping
例子:自定义 inventory(推荐)
创建文件
新建 ansible_client.ini
[web]
192.168.58.138 ansible_user=user
解释:
[web]:主机组名,可以一次性管理组内所有机器ansible_user:ssh登录的用户名,可省略
提示:执行命令时用 -i ansible_client.ini 指定。
测试所有的组内被控端
ansible all -m ping -i ansible_client.ini
测试 web 组内被控端
ansible web -m ping -i ansible_client.ini
例子:修改默认 hosts
修改 hosts 文件
sudo nano /etc/ansible/hosts
在文件末尾添加分组:
[web]
192.168.58.138 ansible_user=user
解释:
[web]:主机组名,可以一次性管理组内所有机器ansible_user:ssh登录的用户名,可省略
测试所有的组内被控端:
ansible all -m ping
测试 web 组内被控端:
ansible web -m ping
五、常见失败原因
- SSH 无法连通:防火墙拦截、端口不是22、IP不可达、密钥不对、账号密码错误
- 受控节点无Python:最小化安装CentOS/RHEL,没有python2/python3,ping直接报错
- Python版本/解释器识别问题:Ansible找不到python,需要在inventory指定
ansible_python_interpreter=/usr/bin/python3 - sudo权限问题:不需要sudo,ping不需要root权限,普通用户SSH登录即可
- 主机密钥确认:首次ssh连接,需要手动ssh登录一次接受host key,或配置
host_key_checking=False
查看官方文档命令
ansible-doc ping
