Ansible必须用系统包管理器安装:Ubuntu/Debian执行sudo apt update && sudo apt install ansible,禁用pip安装以防Python冲突;RHEL 8+/Rocky/AlmaLinux装ansible-core,CentOS 7需先启用EPEL再yum install ansible。

ansible 必须用系统包管理器装,别碰 pip install ansible —— 后者在 2026 年的主流发行版(RHEL 8+/CentOS Stream/Ubuntu 22.04+)上几乎必然触发 Python 包冲突,典型报错是 ImportError: cannot import name 'soft_unicode' 或 ModuleNotFoundError: No module named 'yaml'。
Ubuntu/Debian 上该执行哪条命令
直接运行:sudo apt update && sudo apt install ansible。不要加 PPA,除非你明确需要 community.docker 这类新模块且已接受风险。
- Ubuntu 20.04 默认带 Ansible 2.9,功能够用;若需 2.16+,改用
python3 -m pip install --user ansible==2.16.5(必须加--user) - 装完立刻检查:
ansible --version输出中要有configured module search path字段,为空说明模块路径没初始化,后续所有模块调用都会失败 -
/etc/ansible/ansible.cfg若不存在,ansible --version会显示config file = None—— 不影响基础命令,但某些集合(如community.general)可能无法加载
RHEL/CentOS/Rocky/AlmaLinux 8+ 要注意包名拆分
执行:sudo dnf install epel-release && sudo dnf install ansible-core(注意是 ansible-core,不是旧版 ansible)。
-
ansible-core只含基础引擎和约 150 个内置模块(如ping、copy、shell),不带community.mysql或amazon.aws等集合 - 要使用第三方模块,必须额外运行:
ansible-galaxy collection install community.mysql(需网络 +python3-pip) - 普通用户安装的 collection 默认落在
~/.ansible/collections,root 用户则在/usr/share/ansible/collections—— 切换用户执行时行为可能不一致
CentOS 7 安装前必须配 EPEL,跳过就失败
CentOS 7 已 EOL,但仍有大量生产环境在跑。它没有默认启用 EPEL,直接 yum install ansible 一定报 No package ansible available。
- 正确流程:
sudo yum install epel-release -y && sudo yum install ansible -y - 若国内源慢,可换阿里云镜像:
sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo,再yum clean all && yum repolist - 验证时
ansible localhost -m ping若报Permission denied (publickey),不是 Ansible 没装好,而是 SSH 密钥没配 —— 先执行ssh-keygen -t ed25519 -N ""再ssh-copy-id -i ~/.ssh/id_ed25519.pub localhost
装完不验证等于没装
只跑 ansible --version 不够,必须连通性测试通过才算可用。
- 最简验证:
ansible localhost -m ping→ 应返回SUCCESS - 批量测试(有 inventory 文件时):
ansible all -i ./inventory -m ping—— 显式指定-i,避免误读空的/etc/ansible/hosts - 若报
UNREACHABLE! => {"msg": "Failed to connect to the host via ssh"},99% 是 SSH 层问题:检查目标机sshd是否运行、PubkeyAuthentication yes是否开启、~/.ssh权限是否为700、authorized_keys是否为600
真正卡住人的从来不是安装命令本身,而是装完后默认路径、模块搜索路径、collection 加载位置、SSH 认证链这四层隐性依赖没对齐。尤其当多个用户共用一台控制机时,~/.ansible/collections 和 /usr/share/ansible/collections 混用会导致同一份 playbook 在不同账号下表现不一致——这点最容易被忽略。


















