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
sudo yum install epel-release -y
sudo yum install ansible -y
Ubuntu 20.04 / 22.04 PPA + apt
sudo apt update
sudo apt install software-properties-common -y
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible -y
通用(pip) Python pip
python3 -m pip install --user ansible
版本验证:安装完成后执行 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 环境搭建架构总览

下图展示了控制节点与受管节点之间的通信链路及组件依赖关系:

Ansible 环境搭建架构图 控制节点 Ansible Engine SSH Client 密钥对 (id_rsa/id_rsa.pub) Inventory (hosts) Playbooks / Roles SSH 密钥认证 免密登录 端口 22 受管节点 Python 3.5+ SSHD 服务 authorized_keys sudo 权限 simplejson (可选) 关键说明: 1. 控制节点必须能通过 SSH 密钥认证访问所有受管节点。 2. 受管节点无需安装 Ansible,但必须保证 Python 环境和 SSH 服务可用。

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" 表示环境搭建成功。