Ansible批量管理多台服务器:零基础入门实战教程
适用场景
当你手上有几台、几十台甚至上百台服务器需要同时执行某个命令、更新配置或部署应用时,逐一登录操作不仅低效还容易出错。Ansible 是一种轻量级的自动化工具,无需在被控端安装代理,依赖 SSH 即可实现批量管理。
本文目标:让零基础用户看完就能上手,用 Ansible 批量管理多台服务器。
第一步:准备环境
Ansible 采用控制节点(你的电脑或一台跳板机)加被控节点(需要管理的服务器)的架构。
控制节点要求
- 操作系统:Linux / macOS / Windows(WSL)均可,推荐 Linux。
- Python 3.8 以上(大多数系统自带)。
- 网络能访问被控节点(SSH 端口 22 开放)。
被控节点要求
- 支持 SSH 连接,有可登录的账号(root 或普通用户)。
- Python 2.7 或 3.5 以上(Ansible 默认依赖 Python 执行模块,但通过
raw模块也可用于极简环境)。 - 不需要安装 Ansible。
第二步:安装 Ansible
在控制节点上执行以下命令安装(以 Ubuntu/Debian 为例):
sudo apt update
sudo apt install ansible -y
CentOS / RHEL 使用:
sudo yum install epel-release -y
sudo yum install ansible -y
验证安装:
ansible --version
看到版本号即成功。
第三步:配置 SSH 免密登录
Ansible 通过 SSH 连接被控节点,因此需要控制节点能够无密码登录到每一台被控机。
- 在控制节点生成 SSH 密钥(如果已有则跳过):
ssh-keygen -t rsa -b 4096
- 将公钥拷贝到被控节点:
ssh-copy-id root@被控节点IP
按提示输入被控机密码。
重复此操作直至所有被控节点都加入信任列表。
- 测试免密登录:
ssh root@被控节点IP "hostname"
如果能直接返回主机名则配置成功。
第四步:编写 Inventory(主机清单)
Inventory 告诉 Ansible 要管理哪些服务器。
创建一个纯文本文件,例如 /etc/ansible/hosts 或项目目录下的 hosts.ini:
[webservers]
192.168.1.10
192.168.1.11 ansible_user=ubuntu ansible_port=22
[dbservers]
192.168.1.20 ansible_ssh_private_key_file=/home/user/.ssh/id_rsa
- 方括号内是组名(可自定义),用于分组管理。
- 每一行列出一个主机 IP 或域名,可指定连接用户、端口、密钥等。
- 若不指定,Ansible 会用当前 SSH 默认用户(通常是 root)。
第五步:执行 Ad-hoc 命令实现批量操作
Ad-hoc 模式适合执行单条命令。
常用模块:
测试连通性
ansible all -i hosts.ini -m ping
若返回 pong 则表示连通正常。
批量执行 shell 命令
ansible webservers -i hosts.ini -m command -a "uptime"
批量安装软件(使用 apt 模块)
ansible all -i hosts.ini -m apt -a "name=curl state=present" --become
注意 --become 用于提权(类似 sudo)。
批量拷贝文件
ansible all -i hosts.ini -m copy -a "src=/tmp/myfile dest=/opt/"
第六步:避坑指南
- Host key checking 报错:首次连接时 SSH 会提示确认主机指纹。建议在
ansible.cfg中设置host_key_checking = False或环境变量ANSIBLE_HOST_KEY_CHECKING=False(注意安全风险)。 - Python 版本不匹配:被控端 Python 版本过低或路径不同。可在 Inventory 中指定
ansible_python_interpreter=/usr/bin/python3。 - SSH 连接超时:检查控制节点是否能 ping 通被控机,防火墙是否放行 22 端口,并确认
sshd服务运行。 - 权限不足:如果使用非 root 用户执行需要 sudo 的命令,确认该用户有 sudo 权限并设置
--become参数。 - Inventory 语法错误:IP 地址后不要加空格,组名不要包含特殊字符。
验证效果
做完以上步骤后,你已具备 Ansible 批量管理多台服务器的基本能力。
可以尝试编写一个简单的 Playbook(例如安装 Nginx 并启动服务),批量应用到整个组,进一步体会自动化带来的效率提升。
如果你需要更复杂的任务编排,建议学习 Playbook 的语法和变量。
本文侧重于快速上手,后续可继续阅读“Ansible Playbook 入门”相关教程。