Ansible 适合在没有代理的环境中批量管理 Linux 服务器,命令行模块主要用于临时任务,但生产环境更推荐专用模块。
先说结论:Ansible 核心优势是无代理架构,命令模块适合快速排查,但要注意幂等性与主机密钥检查。
- 适合 SSH 可达的服务器群
- 先看连通性测试 (ping 模块)
- 建议优先用专用模块代替 shell
- 默认开启主机密钥检查,首次连接需确认
环境准备与安装
在控制节点安装 Ansible,根据操作系统选择以下命令:
# CentOS/RHEL
yum install ansible -y# Ubuntu/Debian
apt install ansible -y# Pip 安装 (确保 Python 环境)
pip3 install ansible
安装完成后验证版本:
ansible `--version`
Inventory 配置文件示例
编辑 hosts 文件(默认位于 /etc/ansible/hosts 或当前目录下的 hosts),按组划分服务器 IP:
[webservers]
192.168.1.10
192.168.1.11[dbservers]
192.168.1.20 ansible_user=root
注意:若 SSH 端口非 22 或用户非当前用户,需在行后指定 ansible_port 或 ansible_user。
SSH 免密登录配置
Ansible 依赖 SSH 连接,需配置控制端到被管节点的免密登录:
# 生成密钥对 (一路回车)
ssh-keygen -t rsa -P ""# 分发公钥到目标机器
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.10
分发完成后,手动 ssh root@192.168.1.10 测试是否无需密码即可登录。
命令行模块实操
下面是几个常用的即席命令,直接在控制节点执行即可:
# 测试所有主机连通性
ansible all -m ping# 查看 Web 服务器组 nginx 状态
ansible web_servers -m command -a "systemctl status nginx"# 需要提权时添加 `--become` 参数 (注意 shell 模块支持管道,command 不支持)
ansible all -m shell -a "uptime" `--become`
验证是否生效
执行命令后,除了观察终端输出的颜色(green 代表成功且无变更,yellow 代表成功且有变更),在脚本或自动化流程中应检查返回码:
# 查看上一条命令退出状态,0 代表成功
echo $?
同时登录目标机器检查实际配置,确认服务状态或文件内容与预期一致。对于关键操作,建议在 playbook 中使用 register 变量捕获输出进行断言。
常见风险与坑
- 模块选择:command 模块不支持管道符、变量重定向(如 $HOME),需要复杂 shell 功能时改用 shell 模块。
- 主机密钥检查:Ansible 默认开启 host_key_checking。首次连接未知主机可能会报错。生产环境若需关闭,需在 ansible.cfg 中设置 host_key_checking = False,避免中间人风险。
- 幂等性:命令模块默认不幂等,重复执行可能触发告警或副作用,写入 playbook 前需测试,优先使用 service、yum 等专用模块。
- 连接超时:网络波动可能导致 SSH 连接超时,可通过 -T 参数调整超时时间。
参考来源
- Ansible 官方文档,Introduction to ad hoc commands,https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html
原文链接:https://www.zjcp.cc/ask/11116.html
