Ansible批量管理入门:从安装到免密批量执行命令
在控制节点上准备环境
Ansible采用无代理架构,你只需要在一台机器(控制节点)上安装它,就能管理其他所有服务器。
控制节点建议用Linux系统(如CentOS 7/8或Ubuntu 20.04/22.04),Python环境要保留系统自带的版本(2.7或3.x均可)。
被管节点同样需要Python,并且控制节点能通过SSH访问它们。
如果你的被管机器比较多,先确认网络互通、防火墙放行22端口。
安装Ansible并测试基本连接
在控制节点上运行以下命令安装Ansible:
# CentOS/RHEL 系列
yum install -y epel-release
yum install -y ansible
# Ubuntu/Debian 系列
apt update && apt install -y ansible
安装后查看版本:ansible --version。
下一步编辑主机清单文件 /etc/ansible/hosts,把要管理的服务器IP写进去,格式如下:
[webservers]
192.168.1.10
192.168.1.11
[dbservers]
192.168.1.20 ansible_user=root
可以用组名(如 webservers)批量操作特定服务器。
保存后执行第一条测试命令:
ansible all -m ping -k
参数 -k 会要求输入SSH密码,返回绿色 "pong" 表示连接成功。
如果失败,检查SSH服务是否启动、用户名是否正确。
配置SSH免密登录
每次输入密码很麻烦,建议配置SSH密钥对。
在控制节点生成密钥:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
然后逐一复制公钥到被管节点:
ssh-copy-id root@192.168.1.10
ssh-copy-id root@192.168.1.11
如果被管节点SSH端口非22,加上 -p 端口号。
复制完成后测试免密登录:ssh root@192.168.1.10 'hostname',不再提示输入密码。
此时再执行 ansible all -m ping(不加 -k)也应返回成功。
编写第一个批量执行命令的Playbook
Playbook是Ansible的编排脚本,用YAML编写。
创建一个文件 first.yml,内容如下:
---
- name: 检测系统信息并查看磁盘使用
hosts: webservers
tasks:
- name: 查看系统运行时间
command: uptime
register: result
- name: 显示结果
debug:
msg: "{{ result.stdout }}"
- name: 检查磁盘分区使用率
command: df -h
执行Playbook:
ansible-playbook first.yml
输出会显示每个任务的执行情况,包括成功、失败或跳过。
如果出现红色失败信息,根据提示排查可能的问题。
避坑与验证
- SSH权限问题:被管节点的
~/.ssh目录权限必须为700,authorized_keys文件权限为600,否则SSH会拒绝连接。 - Python版本不匹配:Ansible 2.9以上版本对Python 3兼容更好,若被管节点只有Python 2,可在ansible.cfg中指定
ansible_python_interpreter=/usr/bin/python。 - known_hosts拦截:首次连接时会询问确认主机指纹。可以全局关闭检查:在
ansible.cfg中设置host_key_checking = False。 - 验证批量效果:执行
ansible all -m command -a "uptime"观察所有机器返回的系统运行时间,对比一致则说明批量管理生效。
常见问题:Q:ansible all -m ping 报 UNREACHABLE?
A:先分别手动SSH测试能否免密登录,确认网络和密钥无误。
Q:Playbook报 MODULE_FAILURE?
A:检查被管节点的Python版本和路径,或尝试用 ping 模块单独测试连通性。
如果你刚开始接触Ansible,建议先用两三台测试机走完本文流程,再扩展到生产环境。
遇到卡住的地方,优先核对SSH配置和主机清单格式。