服务器运维自动化工具Ansible入门
什么时候需要服务器运维自动化工具
如果你手头有3台以上的服务器,
每次升级软件、
改配置文件都要一台台SSH进去敲命令,
非常容易漏掉某台或打错命令。服务器运维自动化工具能让你在一台控制机上写一个任务文件,
然后一次发往所有目标服务器自动执行。
本文以最流行的Ansible为例,帮你从零搭建一套自动化运维环境。
准备条件:两台服务器和一个密钥
- 一台控制机(可以是你的本地电脑或一台轻量云服务器),安装Linux(CentOS / Ubuntu均可)
- 至少一台目标服务器(支持SSH连接,同个内网或公网均可)
- 控制机能通过SSH密钥方式免密登录目标服务器(如果不会配置密钥,参考下面简短步骤)
配置密钥示例(在控制机执行)
`bash
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
ssh-copy-id root@目标服务器IP
`
安装Ansible并验证连通性
安装Ansible
在控制机上执行以下命令(根据系统选其一):
Ubuntu / Debian
sudo apt update
sudo apt install ansible -y
CentOS / RHEL
sudo yum install epel-release -y
sudo yum install ansible -y
安装完成后检查版本:
ansible --version
出现版本号即成功。
添加目标服务器到主机清单
编辑 /etc/ansible/hosts 文件(或新建一个文件 ~/myhosts),添加目标服务器IP:
[webservers]
192.168.1.10
192.168.1.11
[webservers] 是组名,你可以随意命名。
测试连通性
ansible webservers -m ping -i /etc/ansible/hosts
如果返回 "ping": "pong" 表示连接成功。
如果失败,请检查SSH免密配置和防火墙。
编写第一个Playbook:自动安装Nginx
Playbook是Ansible的任务脚本,使用YAML格式。
新建文件 install-nginx.yml:
---
- hosts: webservers
become: yes
tasks:
- name: 安装nginx
apt:
name: nginx
state: present
when: ansible_os_family == "Debian"
- name: 启动nginx并设置开机自启
service:
name: nginx
state: started
enabled: yes
说明:hosts 指定目标组,become: yes 表示提权为root,apt 模块用于Debian系系统。
如果目标服务器是CentOS,请将 apt 改为 yum,并调整 when 条件。
执行Playbook:
ansible-playbook install-nginx.yml -i /etc/ansible/hosts
观察输出,如果显示 changed 或 ok 表示操作成功。
避坑指南和高频问题解答
问题1:执行Playbook时提示“SSH连接失败”
- 检查目标服务器SSH服务是否运行:
systemctl status sshd - 确认控制机公钥已正确添加到目标服务器的
~/.ssh/authorized_keys - 如果目标服务器禁止密码认证,确保密钥已配置并验证
ssh root@目标IP能直接登录
问题2:模块执行时报错“权限不足”
- 确保Playbook中使用了
become: yes,并且目标服务器的sudo配置允许该用户无密码执行sudo(在/etc/sudoers中添加username ALL=(ALL) NOPASSWD:ALL)
问题3:Playbook语法检查
执行前可用 ansible-playbook --syntax-check your.yml 检查语法错误,YAML对缩进非常敏感,请统一使用空格不要用Tab。
问题4:如何批量执行自定义命令?
使用 command 或 shell 模块,例如:
- name: 查看当前内存
command: free -h
效果验证与后续扩展
执行完Playbook后,在浏览器访问目标服务器的IP,如果看到Nginx欢迎页说明部署成功。
你也可以继续编写更多Playbook来管理用户、防火墙、应用部署等。
总结:通过服务器运维自动化工具Ansible,你只需要维护一份代码就能控制成百上千台服务器,大大减少重复劳动。
建议从简单任务开始,逐步完善你的Playbook库。
遇到问题时,多用 ansible-doc 查阅模块文档,或者回看本文的避坑部分。
如果你正在实践服务器运维自动化,先按照本文安装Ansible并跑通一个任务,再根据自己环境微调。
自动化运维并不难,关键在于勤于测试和记录。