Ansible 简介
Ansible 是一款开源的自动化运维工具,采用无代理架构,通过 SSH 协议对远程服务器进行批量配置管理、应用部署和任务执行。本教程将指导您在 CentOS 7 系统上完成 Ansible 的安装、基础配置和常用操作。
环境准备
本教程基于 CentOS 7 64 位操作系统。Ansible 主控节点(控制机)需要能够通过 SSH 连接到所有被管理节点(目标服务器)。
安装 Ansible
在 CentOS 7 上,可以通过 EPEL 仓库安装 Ansible。
yum install epel-release -y && yum install ansible -y
安装完成后,可以通过以下命令验证版本:
ansible --version
配置 Ansible 主机清单
Ansible 通过主机清单文件定义需要管理的服务器。默认配置文件位于 /etc/ansible/hosts。
使用文本编辑器(如 vi)打开该文件:
vi /etc/ansible/hosts
在文件中,您可以按以下格式添加服务器 IP 地址或主机名,并可以进行分组。
示例配置
以下示例定义了一个名为 targets 的组,并添加了 localhost(本机)作为成员,同时指定其连接方式为本地连接。
[targets]
localhost ansible_connection=local
如果要管理多台远程服务器,可以这样添加:
[web_servers]
192.168.1.101
192.168.1.102
[db_servers]
192.168.1.201
配置 SSH 免密登录
为了让 Ansible 能够无缝连接远程服务器,建议在主控端配置 SSH 密钥对,并将公钥分发到所有被管理节点。
1. 生成 SSH 密钥对
在主控端执行以下命令生成密钥对(如果已有密钥可跳过):
ssh-keygen -t rsa -b 4096
生成过程中按提示操作,默认会将密钥保存在 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。
2. 分发公钥到远程服务器
使用 Ansible 的 authorized_key 模块可以批量推送公钥。以下命令将主控端的公钥添加到所有目标服务器 root 用户的授权密钥文件中:
ansible all -m authorized_key -a "user=root key='{{ lookup('file', '~/.ssh/id_rsa.pub') }}'"
注意: 执行此命令前,需要确保主控端可以通过密码 SSH 登录到目标服务器,或者目标服务器上已预先配置了其他方式的密钥认证。
测试连接
配置完成后,使用 ping 模块测试与所有被管理节点的连通性:
ansible all -m ping
如果返回 "pong",则表示连接成功。
执行远程命令
使用 shell 模块可以在远程服务器上执行 Shell 命令。
基本语法
ansible <主机或组名> -m shell -a "需要执行的命令"
示例:系统更新与安装软件
以下命令让所有被管理服务器执行系统更新,并安装 wget、curl 和 git:
ansible all -m shell -a "yum update -y && yum install wget curl git -y"
进阶使用说明
- 目标选择: 命令中的
all代表/etc/ansible/hosts文件中定义的所有主机。您可以替换为具体的组名(如web_servers)来仅对该组服务器进行操作。 - 模块化操作: Ansible 的强大之处在于其丰富的模块(如
copy,file,yum,service等),建议后续使用 Playbook(YAML 剧本)来编排复杂的自动化任务,而非单纯使用shell模块。 - 安全建议: 生产环境中,建议使用非 root 用户并配置 sudo 权限,同时结合 Ansible Vault 对敏感信息进行加密。
通过以上步骤,您已经完成了 Ansible 的基础环境搭建,并可以开始使用它来批量管理您的服务器了。