自动化运维工具 Ansible 概述及命令行模块怎么用?

文章导读
Ansible 适合在没有代理的环境中批量管理 Linux 服务器,命令行模块主要用于临时任务,但生产环境更推荐专用模块。
📋 目录
  1. 环境准备与安装
  2. Inventory 配置文件示例
  3. SSH 免密登录配置
  4. 命令行模块实操
  5. 验证是否生效
  6. 常见风险与坑
  7. 参考来源
A A

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 概述及命令行模块怎么用?
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 概述及命令行模块怎么用?

命令行模块实操

下面是几个常用的即席命令,直接在控制节点执行即可:

# 测试所有主机连通性
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