3. Ansible 环境搭建:控制节点与受管节点配置
Ansible 采用无代理(Agentless)架构,控制节点负责下发指令,受管节点只需具备 Python 环境和 SSH 服务即可。本章将完整演示控制节点安装、受管节点前置条件检查以及免密 SSH 配置,为后续自动化操作奠定基础。
3.1 控制节点安装 Ansible
控制节点是运行 ansible 命令的主机,支持 Linux 和 macOS。Windows 仅能作为受管节点,不能作为控制节点。
3.1.1 Linux(CentOS / RHEL / Ubuntu)
| 发行版 | 安装方式 | 命令 |
|---|---|---|
| CentOS 7/8 / RHEL 8+ | EPEL + yum | |
| Ubuntu 20.04 / 22.04 | PPA + apt | |
| 通用(pip) | Python pip | |
版本验证:安装完成后执行
ansible --version,输出应包含 Ansible 版本号、Python 版本及配置文件路径。
3.1.2 macOS
macOS 推荐使用 Homebrew 安装,避免系统 Python 环境冲突:
brew install ansible
若使用 pip 安装,建议先创建虚拟环境:
python3 -m venv ansible-env
source ansible-env/bin/activate
pip install ansible
3.2 受管节点前置条件
受管节点不需要安装 Ansible,但必须满足以下两个核心条件:
- Python 2.7+ 或 Python 3.5+:Ansible 通过 SSH 推送临时 Python 脚本执行任务。
- SSH 服务(sshd):控制节点通过 SSH 连接受管节点。
3.2.1 检查 Python 版本
在受管节点上执行:
python --version # 优先检查 Python 2
python3 --version # 若 Python 2 不存在,检查 Python 3
| 场景 | 要求 | 备注 |
|---|---|---|
| Python 2.7+ | 可用 | Ansible 2.9 及之前版本默认依赖 |
| Python 3.5+ | 可用 | Ansible 2.10+ 推荐使用 |
| 无 Python | 需安装 | yum install python3 -y 或 apt install python3 -y |
3.2.2 检查 SSH 服务
systemctl status sshd # Linux
sudo systemctl enable sshd --now # 若未运行则启动并设置开机自启
常见问题:若受管节点为最小化安装,可能缺少
python-simplejson 模块。Ansible 在部分场景下依赖该模块进行 JSON 序列化,建议提前安装:yum install python3-simplejson -y 或 apt install python3-simplejson -y。
3.3 免密 SSH 配置
Ansible 默认使用 SSH 密钥认证,避免每次执行任务都输入密码。配置分为三步:生成密钥对、分发公钥、验证连接。
3.3.1 生成 SSH 密钥对
在控制节点上执行:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
-t rsa:指定密钥类型为 RSA。-b 4096:密钥长度 4096 位,安全性更高。-f ~/.ssh/id_rsa:指定密钥文件路径。-N "":空密码短语,实现免交互登录。
3.3.2 分发公钥至受管节点
使用 ssh-copy-id 工具将公钥写入受管节点的 ~/.ssh/authorized_keys:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@managed-node-ip
若 ssh-copy-id 不可用,可手动追加:
cat ~/.ssh/id_rsa.pub | ssh user@managed-node-ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
3.3.3 验证免密登录
ssh user@managed-node-ip "hostname && whoami"
若无需输入密码即返回主机名和用户名,则配置成功。
批量分发脚本示例:将受管节点 IP 写入
hosts.txt,逐行执行分发。
while IFS= read -r ip; do
ssh-copy-id -i ~/.ssh/id_rsa.pub user@"$ip"
done < hosts.txt
3.4 环境搭建架构总览
下图展示了控制节点与受管节点之间的通信链路及组件依赖关系:
3.5 环境验证清单
完成上述配置后,建议逐项核验以下清单,确保环境就绪:
| # | 核验项 | 验证命令 | 预期结果 |
|---|---|---|---|
| 1 | 控制节点 Ansible 版本 | ansible --version |
显示版本号及 Python 路径 |
| 2 | 受管节点 Python 版本 | ssh user@host "python3 --version" |
Python 3.5+ |
| 3 | 受管节点 SSH 服务 | ssh user@host "systemctl is-active sshd" |
active |
| 4 | 免密 SSH 登录 | ssh user@host "hostname" |
无需密码,返回主机名 |
| 5 | Ansible 连通性 | ansible all -i "host," -m ping -u user |
pong |
快速连通测试:使用
ansible all -i "192.168.1.10," -m ping -u root 可单行验证控制节点与受管节点的连通性。返回 "pong" 表示环境搭建成功。