《安全配置自动化实现路径》
第4章 Ansible核心基础

4. Ansible核心基础:架构、安装配置、Inventory管理与Ad-Hoc命令

4.1 Ansible架构全景

Ansible采用无代理(Agentless)架构,通过SSH协议直接管理目标主机。其核心组件包括:

控制节点 Ansible Engine Inventory Playbook 模块库 SSH通道 无代理连接 被管理节点 目标主机 Ansible 核心架构:控制节点通过SSH管理目标主机 无需在目标主机安装代理软件
组件 说明
控制节点 安装Ansible的主机,执行自动化任务
Inventory 管理目标主机的清单文件(INI/YAML格式)
模块 执行具体任务的代码单元(如copy、yum、service)
Playbook YAML格式的任务编排文件

4.2 安装配置

Ansible支持多种安装方式,推荐使用pip或系统包管理器安装。

pip安装 pip install ansible yum/apt安装 yum install ansible 源码安装 git clone + setup.py 安装完成后验证:ansible --version

安装步骤

  1. 更新系统包:sudo yum update -y(CentOS/RHEL)
  2. 安装EPEL源:sudo yum install epel-release -y
  3. 安装Ansible:sudo yum install ansible -y
  4. 验证安装:ansible --version

配置文件结构

/etc/ansible/
├── ansible.cfg          # 主配置文件
├── hosts                # Inventory清单文件
└── roles/               # 角色目录

4.3 Inventory管理

Inventory定义了Ansible管理的主机列表和分组信息,支持静态和动态两种模式。

Inventory [web_servers] [db_servers] [cache_servers] web1 web2 db1 redis1 Inventory 分组与主机关系图

静态Inventory示例(INI格式)

# /etc/ansible/hosts
[web_servers]
web1.example.com
web2.example.com ansible_user=admin ansible_port=2222

[db_servers]
db1.example.com ansible_ssh_private_key_file=/path/to/key

[cache_servers]
redis1.example.com

[all:vars]
ansible_user=root
ansible_ssh_common_args='-o StrictHostKeyChecking=no'

常用变量说明

变量 说明
ansible_host 目标主机IP或域名
ansible_port SSH端口(默认22)
ansible_user SSH登录用户
ansible_ssh_private_key_file SSH私钥路径

4.4 Ad-Hoc命令

Ad-Hoc命令用于执行一次性任务,无需编写Playbook,适合快速操作和测试。

ansible [pattern] -m [module] -a "[module_args]" pattern -m module -a args -i inventory Ad-Hoc命令结构:目标模式 + 模块 + 参数

常用Ad-Hoc命令示例

命令 说明
ansible all -m ping 测试所有主机连通性
ansible web -m command -a "uptime" 在web组执行uptime命令
ansible db -m copy -a "src=/etc/hosts dest=/tmp/" 复制文件到db组主机
ansible all -m yum -a "name=httpd state=latest" 安装最新httpd包
ansible all -m service -a "name=httpd state=started enabled=yes" 启动并设置httpd开机自启

常用模块速查

  • ping — 测试主机连通性
  • command — 执行shell命令(不支持管道/重定向)
  • shell — 执行shell命令(支持管道/重定向)
  • copy — 文件复制
  • yum/apt — 包管理
  • service/systemd — 服务管理
  • file — 文件/目录属性管理
  • user — 用户管理

Ad-Hoc命令实战示例

# 1. 测试所有主机连通性
ansible all -m ping

# 2. 查看web服务器组的内存使用情况
ansible web_servers -m shell -a "free -h"

# 3. 在db服务器组创建用户
ansible db_servers -m user -a "name=deploy state=present groups=wheel"

# 4. 分发配置文件到所有主机
ansible all -m copy -a "src=./nginx.conf dest=/etc/nginx/nginx.conf mode=0644"

# 5. 重启服务并检查状态
ansible web_servers -m service -a "name=nginx state=restarted"
ansible web_servers -m shell -a "systemctl status nginx | head -5"

4.5 安全配置最佳实践

SSH密钥认证 禁用密码登录 最小权限原则 使用sudo提权 Vault加密 保护敏感数据 日志审计 记录所有操作 版本控制 Playbook纳入Git Ansible安全配置五大核心实践
  • SSH密钥认证:使用密钥对登录,禁用root密码登录
  • 最小权限原则:使用普通用户+sudo提权,限制命令范围
  • Ansible Vault:加密敏感变量(密码、密钥、证书)
  • 日志审计:启用ansible日志记录,配合ELK集中管理
  • 版本控制:所有Playbook和配置纳入Git仓库管理

ansible.cfg安全配置示例

            ← 上一章
            📖 返回目录
            下一章 →