Ansible简介与优势
Ansible是一款开源的自动化运维工具,由Michael DeHaun于2012年创建,现已成为Linux基金会旗下的托管项目,它基于Python开发,通过SSH协议实现配置管理、应用部署、任务编排和多云环境管理,无需在受控节点安装客户端代理,轻量级架构和简洁的YAML语法使其在运维领域广受欢迎。

相较于Puppet、SaltStack等工具,Ansible的核心优势在于:
- 无代理架构:通过SSH直接连接受控节点,减少部署复杂度。
- 幂等性:重复执行任务不会改变系统状态,确保操作安全性。
- 模块化设计:提供数千个内置模块,支持自定义模块扩展。
- 跨平台支持:可管理Linux、Windows、Unix等多种操作系统。
- 社区活跃:丰富的文档和活跃的开发者社区,便于问题解决。
Linux环境准备
在安装Ansible前,需确保控制节点和受控节点的环境满足基本要求,这是保障自动化任务顺利执行的前提。
控制节点环境
控制节点是运行Ansible命令的机器,需满足以下条件:
- 操作系统:推荐RHEL/CentOS 7+、Ubuntu 18.04+或Debian 9+。
- Python版本:Ansible 2.9+要求Python 3.5+,Ansible 2.4-2.8支持Python 2.7(已停止维护)。
- 依赖包:需安装
python3-pip(用于通过pip安装Ansible)、ssh-clients(SSH客户端工具)和git(可选,用于拉取Playbook集合)。
受控节点环境
受控节点是Ansible管理的目标机器,需满足:
- 操作系统:Linux(如RHEL、Ubuntu、Debian等)、Windows(需开启WinRM)或Unix。
- 网络连通性:控制节点需能通过SSH免密登录受控节点(或配置密钥认证)。
- Python环境:Linux默认已安装Python,若未安装需手动补充(Windows需通过PowerShell配置)。
用户权限配置
推荐创建专用非root用户(如ansible),并赋予sudo权限,避免直接使用root用户操作,以CentOS为例:
useradd ansible passwd ansible # 设置密码 echo "ansible ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers # 赋予sudo免密权限
Ansible安装方式
Ansible支持多种安装方式,可根据需求选择适合的方案,以下是三种主流安装方法的详细步骤。
使用包管理器安装(适合新手)
包管理器安装是最简单的方式,能自动解决依赖问题,但版本可能稍旧。
(1)基于RHEL/CentOS
使用EPEL(Extra Packages for Enterprise Linux)仓库安装:
sudo yum install -y epel-release # 安装EPEL源 sudo yum install -y ansible # 安装Ansible
(2)基于Ubuntu/Debian
使用APT仓库安装:

sudo apt update # 更新软件包列表 sudo apt install -y software-properties-add # 添加PPA源(可选) sudo apt install -y ansible # 安装Ansible
验证安装:
ansible --version # 查看Ansible版本及配置信息
使用pip安装(适合自定义版本)
pip是Python的包管理工具,可安装最新版本的Ansible,适合需要特定版本或开发调试的场景。
(1)安装pip
若系统未安装pip,需先补充:
# CentOS/RHEL sudo yum install -y python3-pip # Ubuntu/Debian sudo apt install -y python3-pip
(2)安装Ansible
pip3 install ansible # 安装最新版Ansible pip3 install ansible==2.9.27 # 安装指定版本(示例为2.9.27)
注意事项:
- 建议使用虚拟环境(如
venv)安装,避免与系统Python包冲突:python3 -m venv ansible-env # 创建虚拟环境 source ansible-env/bin/activate # 激活虚拟环境 pip install ansible # 在虚拟环境中安装
使用源码编译安装(适合开发者)
源码安装可获取最新功能,但需手动处理依赖,适合需要参与Ansible开发或测试的场景。
(1)克隆源码
git clone https://github.com/ansible/ansible.git # 克隆Ansible源码 cd ansible # 进入源码目录
(2)安装依赖
pip3 install -r requirements.txt # 安装Python依赖
(3)配置环境变量
将Ansible命令添加到系统PATH:
echo "export PATH=$PWD/bin:$PATH" >> ~/.bashrc # 添加到bashrc source ~/.bashrc # 立即生效
验证安装:
ansible --version # 输出版本信息即成功
Ansible配置与验证
安装完成后,需进行基础配置以实现控制节点与受控节点的通信,并通过简单任务验证功能。
配置SSH免密登录
Ansible默认通过SSH连接受控节点,推荐使用SSH密钥认证避免重复输入密码。

(1)生成SSH密钥
ssh-keygen -t rsa -b 4096 -f ~/.ssh/ansible_key # 生成密钥对(指定文件名)
(2)分发公钥到受控节点
ssh-copy-id -i ~/.ssh/ansible_key.pub user@受控节点IP # 将公钥复制到受控节点
(3)测试SSH连接
ssh -i ~/.ssh/ansible_key user@受控节点IP # 免密登录测试
配置Inventory文件
Inventory(清单)文件定义了受控节组的列表,是Ansible管理目标的基础,默认配置文件为/etc/ansible/hosts,也可自定义路径。
(1)编辑Inventory文件
sudo vim /etc/ansible/hosts # 编辑默认Inventory文件
(2)添加节点示例
[webservers] # 定义组名“webservers” 192.168.1.10 192.168.1.11 [databases] # 定义组名“databases” db_server1.example.com db_server2.example.com [servers:children] # 定义嵌套组(包含webservers和databases) webservers databases
测试Ansible连通性
使用ansible命令测试控制节点与受控节点的连通性:
ansible all -m ping -i /etc/ansible/hosts # 测试所有节点连通性 ansible webservers -m ping -i /etc/ansible/hosts # 测试webservers组连通性
参数说明:
-m:指定模块(ping模块用于测试连通性)。-i:指定Inventory文件路径(默认为/etc/ansible/hosts,可省略)。
若返回类似以下结果,表示配置成功:
168.1.10 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
常见问题与解决方案
“Permission denied (publickey,password)”错误
原因:SSH密钥未正确分发或受控节点SSH服务配置异常。
解决:
- 检查公钥是否已复制到受控节点的
~/.ssh/authorized_keys文件。 - 确认受控节点SSH服务开启:
systemctl status sshd(CentOS)或systemctl status ssh(Ubuntu)。
“Ansible requires a json module”错误
原因:系统未安装python3-json模块。
解决:
- CentOS:
sudo yum install -y python3-json - Ubuntu:
sudo apt install -y python3-json
受控节点Python版本不兼容
原因:Ansible 2.9+要求Python 3.5+,但受控节点为Python 2.7。
解决:
- 升级受控节点Python版本(需编译安装或通过包管理器升级)。
- 使用
ansible_python_interpreter变量指定Python路径(在Inventory中添加:168.1.10 ansible_python_interpreter=/usr/bin/python3)。
Linux环境下安装Ansible是自动化运维的第一步,通过包管理器、pip或源码安装均可满足不同需求,配置SSH免密登录和Inventory文件是核心环节,直接关系到Ansible能否正常管理受控节点,完成安装后,可通过简单的ping模块测试功能,逐步扩展至配置管理、应用部署等复杂场景,Ansible的简洁性和高效性将显著提升运维效率,降低人工操作风险,是现代IT架构中不可或缺的自动化工具。















