文章总结: 文档系统介绍Ansible自动化运维入门知识,涵盖其无代理架构、环境搭建、Inventory清单及Playbook脚本编写。通过Ad-Hoc命令与实战项目演示服务器初始化与监控部署,总结调试技巧与安全规范。内容实战导向,旨在帮助初学者快速掌握批量服务器管理与运维自动化技能,提升工作效率。 综合评分: 75 文章分类: 其他
Ansible 自动化运维入门培训教材
原创
刘军军 刘军军
运维星火燎原
2026年2月2日 00:01 北京
学习目标:
- ✅理解Ansible基本概念和工作原理
- ✅ 学会安装和配置Ansible环境
- ✅ 掌握Ad-Hoc命令的日常使用
- ✅ 能够编写简单的Playbook脚本
- ✅ 实现常见的自动化运维任务
课程特色:
- 🐣 零基础友好:从最基础的概念讲起
- 🎯 实战导向:每个知识点都有实际例子
- 🚀 快速上手:学完就能用在工作中
- 📊 可视化理解:用生活化的比喻解释技术概念
第一部分:Ansible 是什么?
1.1 为什么需要自动化运维?
想象一下你要管理10台服务器,每天都要:
- 🔄 检查系统状态
- 📦 安装软件更新
- 🔧 修改配置文件
- 📊 查看日志文件
如果手动操作,不仅效率低,还容易出错。Ansible就是来解决这些问题的!
1.2 Ansible 的超级能力
Ansible就像你的机器人助手:
- 🤖 无需安装客户端:通过SSH直接管理服务器
- 📝 简单易读:用YAML格式写”任务清单”
- 🔄 幂等性:多次执行结果一致,不会重复操作
- 🎯 声明式:告诉它”想要什么”,而不是”怎么去做”
1.3 Ansible 工作原理
你(控制端) → 编写任务清单(Playbook) → Ansible → SSH → 服务器们(被管节点)
简单来说:
- 你在控制机上写”要做的事情”
- Ansible通过SSH连接到目标服务器
- 在目标服务器上执行任务
- 返回执行结果给你
第二部分:环境准备
2.1 安装Ansible
在控制机上安装(Ubuntu/CentOS):
# Ubuntu/Debian系统
sudo apt update
sudo apt install -y ansible
# CentOS/RHEL系统
sudo yum install -y epel-release
sudo yum install -y ansible
# 验证安装
ansible --version
2.2 配置SSH免密登录
Ansible需要通过SSH连接服务器,配置免密登录后就不用每次输入密码了:
# 1. 生成SSH密钥(如果还没有的话)
ssh-keygen -t rsa -b 4096
# 2. 复制公钥到目标服务器
ssh-copy-id username@server-ip
# 3. 测试连接
ssh username@server-ip "hostname"
2.3 创建测试环境
建议准备2-3台虚拟机作为练习环境:
- 1台控制机(安装Ansible)
- 1-2台被管服务器(什么都不需要安装)
第三部分:Inventory – 服务器清单
3.1 什么是Inventory?
Inventory就是你的”服务器通讯录”,告诉Ansible要管理哪些服务器。
3.2 创建第一个Inventory文件
创建文件 hosts.ini:
# 单个服务器
192.168.1.100
# 给服务器起别名
web1 ansible_host=192.168.1.101
# 分组管理
[web_servers]
web1
192.168.1.102
[db_servers]
192.168.1.103
192.168.1.104
# 带端口的服务器
[special_servers]
server5:2222 # SSH端口不是默认的22
3.3 使用Inventory
# 查看所有服务器
ansible all --list-hosts
# 查看web_servers组的服务器
ansible web_servers --list-hosts
# 测试连接所有服务器
ansible all -m ping
第四部分:Ad-Hoc 命令 – 快速执行任务
4.1 什么是Ad-Hoc命令?
Ad-Hoc命令就像”快捷指令”,不需要写完整的脚本,直接执行单个任务。
基本格式:
ansible [服务器组] -m [模块] -a "[参数]"
4.2 常用Ad-Hoc命令示例
4.2.1 系统信息查询
# 测试服务器连通性
ansibleall -m ping
# 查看系统信息
ansibleall -m setup
# 查看磁盘空间
ansibleall -m shell -a "df -h"
# 查看内存使用
ansibleall -m shell -a "free -m"
# 查看服务器时间
ansibleall -m shell -a "date"
4.2.2 文件操作
# 创建目录
ansible all -mfile -a"path=/tmp/test_dir state=directory"
# 创建文件
ansible all -mfile -a"path=/tmp/test.txt state=touch"
# 删除文件
ansible all -mfile -a"path=/tmp/test.txt state=absent"
# 复制文件
ansible all -mcopy -a"src=./local_file.txt dest=/tmp/remote_file.txt"
4.2.3 软件包管理
# Ubuntu/Debian系统更新软件包列表
ansible ubuntu_servers -m apt -a "update_cache=yes"
# 安装软件(Ubuntu)
ansible ubuntu_servers -m apt -a "name=nginx state=present"
# 安装软件(CentOS)
ansible centos_servers -m yum -a "name=nginx state=present"
# 卸载软件
ansible all -m apt -a "name=nginx state=absent"
4.2.4 服务管理
# 启动服务
ansibleall -m service -a "name=nginx state=started"
# 停止服务
ansibleall -m service -a "name=nginx state=stopped"
# 重启服务
ansibleall -m service -a "name=nginx state=restarted"
# 设置开机自启
ansibleall -m service -a "name=nginx enabled=yes"
4.2.5 用户管理
# 创建用户
ansibleall -m user -a "name=testuser state=present"
# 删除用户
ansibleall -m user -a "name=testuser state=absent"
# 创建用户并设置密码
ansibleall -m user -a "name=testuser password={{ 'mypassword' | password_hash('sha512') }}"
4.3 实用技巧
# 只在特定服务器上执行
ansible web1 -m shell -a "hostname"
# 详细输出(看到执行过程)
ansibleall -m shell -a "ls /tmp" -v
# 更详细的输出
ansibleall -m shell -a "ls /tmp" -vvv
# 并行执行(同时操作多台服务器)
ansibleall -m ping -f 10 # 同时10台
第五部分:Playbook – 自动化脚本
5.1 什么是Playbook?
Playbook就像”烹饪食谱”,用YAML格式写下详细的步骤,Ansible会按顺序执行。
为什么用Playbook?
- 📖 可重复使用:一次编写,多次使用
- 📚 版本控制:可以用Git管理
- 👥 团队协作:多人可以共同维护
- 🔍 易于调试:清晰的任务流程
5.2 第一个Playbook
创建文件 first_playbook.yml:
---
- name: 我的第一个Playbook
hosts:all
tasks:
- name: 创建测试目录
file:
path: /tmp/ansible_test
state: directory
mode: '0755'
- name: 创建欢迎文件
copy:
content: |
你好!这是Ansible创建的文件。
创建时间:{{ ansible_date_time.iso8601 }}
dest: /tmp/ansible_test/welcome.txt
mode: '0644'
- name: 显示完成信息
debug:
msg:"Playbook执行完成!"
5.3 执行Playbook
# 语法检查
ansible-playbook first_playbook.yml --syntax-check
# 试运行(不实际执行)
ansible-playbook first_playbook.yml --check
# 实际执行
ansible-playbook first_playbook.yml
# 详细输出
ansible-playbook first_playbook.yml -v
5.4 Playbook 结构详解
---
- name: 描述这个Playbook做什么
hosts:all # 在哪些服务器上执行
become: yes # 是否用sudo权限
vars: # 定义变量
app_user: "www-data"
app_port:8080
tasks: # 任务列表
- name: 任务1描述
模块名:
参数1: 值1
参数2: 值2
- name: 任务2描述
模块名:
参数1: 值1
5.5 常用模块在Playbook中的使用
5.5.1 系统配置示例
---
- name: 系统基础配置
hosts:all
become: yes
tasks:
- name: 安装常用软件
apt:
name:
- curl
- wget
- vim
- htop
state: present
update_cache: yes
- name: 配置时区
timezone:
name: Asia/Shanghai
- name: 创建管理员用户
user:
name: admin
groups: sudo
shell: /bin/bash
password: "{{ 'admin123' | password_hash('sha512') }}"
- name: 配置SSH禁止root登录
lineinfile:
path: /etc/ssh/sshd_config
line: "PermitRootLogin no"
regexp: "^PermitRootLogin"
- name: 重启SSH服务
service:
name: sshd
state: restarted
5.5.2 Web服务器部署示例
---
- name: 部署Nginx网站
hosts: web_servers
become: yes
tasks:
- name: 安装Nginx
apt:
name: nginx
state: present
- name: 创建网站目录
file:
path: /var/www/mywebsite
state: directory
owner: www-data
group: www-data
mode: '0755'
- name: 部署网站文件
copy:
src: files/index.html
dest: /var/www/mywebsite/index.html
owner: www-data
group: www-data
mode: '0644'
- name: 配置Nginx虚拟主机
copy:
content: |
server {
listen 80;
server_name mywebsite.com;
root /var/www/mywebsite;
index index.html;
}
dest: /etc/nginx/sites-available/mywebsite
mode: '0644'
- name: 启用网站配置
file:
src: /etc/nginx/sites-available/mywebsite
dest: /etc/nginx/sites-enabled/mywebsite
state: link
- name: 启动Nginx服务
service:
name: nginx
state: started
enabled: yes
- name: 验证网站访问
uri:
url: http://localhost
status_code: 200
第六部分:实战项目
6.1 项目1:批量服务器初始化
目标: 为新服务器完成基础配置
创建 init_server.yml:
---
- name: 服务器初始化配置
hosts: new_servers
become: yes
tasks:
- name: 更新系统
apt:
update_cache: yes
upgrade: dist
- name: 安装基础软件包
apt:
name:
- curl
- wget
- vim
- git
- htop
- net-tools
state: present
- name: 配置主机名
hostname:
name: "{{ inventory_hostname }}"
- name: 配置时区
timezone:
name: Asia/Shanghai
- name: 创建运维用户
user:
name: ops
groups: sudo
shell: /bin/bash
comment:"运维用户"
- name: 配置SSH密钥登录
authorized_key:
user: ops
state: present
key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
- name: 配置防火墙(开放SSH和HTTP)
ufw:
rule: allow
port:"{{ item }}"
proto: tcp
loop:
- 22
- 80
- 443
- name: 启用防火墙
ufw:
state: enabled
- name: 显示初始化完成信息
debug:
msg:"服务器 {{ inventory_hostname }} 初始化完成!"
6.2 项目2:监控 agent 部署
目标: 在所有服务器上部署监控agent
创建 deploy_monitoring.yml:
---
- name: 部署监控系统
hosts:all
become: yes
tasks:
- name: 创建监控用户
user:
name: monitor
system: yes
shell: /bin/false
- name: 创建监控目录
file:
path: /opt/monitoring
state: directory
owner: monitor
group: monitor
mode: '0755'
- name: 下载监控agent
get_url:
url:"https://example.com/monitor-agent.tar.gz"
dest: /opt/monitoring/
owner: monitor
group: monitor
- name: 解压监控包
unarchive:
src: /opt/monitoring/monitor-agent.tar.gz
dest: /opt/monitoring/
remote_src: yes
owner: monitor
group: monitor
- name: 复制配置文件
template:
src: templates/agent.conf.j2
dest: /opt/monitoring/agent.conf
owner: monitor
group: monitor
mode: '0644'
- name: 创建systemd服务
copy:
src: files/monitor-agent.service
dest: /etc/systemd/system/monitor-agent.service
mode: '0644'
- name: 重载systemd配置
systemd:
daemon_reload: yes
- name: 启动监控服务
service:
name: monitor-agent
state: started
enabled: yes
- name: 验证服务状态
systemd:
name: monitor-agent
state: started
第七部分:最佳实践和技巧
7.1 日常使用技巧
# 1. 快速执行命令
ansibleall -m shell -a "uptime"
# 2. 批量重启服务
ansible web_servers -m service -a "name=nginx state=restarted"
# 3. 批量分发文件
ansibleall -m copy -a "src=./config.txt dest=/tmp/config.txt"
# 4. 收集系统信息
ansibleall -m setup | grep -E "(ansible_distribution|ansible_memtotal_mb)"
# 5. 并行执行(提高效率)
ansibleall -m ping -f 20 # 同时20台服务器
7.2 调试和排错
# 查看详细执行过程
ansible-playbook deploy.yml -vvv
# 只检查语法不执行
ansible-playbook deploy.yml --syntax-check
# 试运行(看会做什么,但不实际执行)
ansible-playbook deploy.yml --check
# 从特定任务开始执行
ansible-playbook deploy.yml --start-at-task "安装软件包"
# 只执行特定标签的任务
ansible-playbook deploy.yml --tags "deploy,config"
7.3 安全建议
- 保护敏感信息:不要将密码明文写在Playbook中
- 使用变量文件:将敏感信息放在加密的变量文件中
- 限制权限:使用最小权限原则
- 定期备份:备份重要的Playbook和配置文件
第八部分:下一步学习建议
8.1 技能提升路径
- 初级阶段(已完成):
- ✅ Ad-Hoc命令使用
- ✅ 基础Playbook编写
- ✅ 常用模块掌握
- 中级阶段:
- 📚 学习Variables(变量)
- 🔄 掌握Loops(循环)
- ⚡ 理解Handlers(触发器)
- 🏗️ 使用Roles(角色)
- 高级阶段:
- 🔧 自定义模块开发
- 📊 动态Inventory
- 🚀 Ansible Tower/AWX
- 🤖 与其他工具集成
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:运维星火燎原 刘军军 刘军军《Ansible 自动化运维入门培训教材》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。






![2026—让我们舒适安全的在一起进步![黑客图文]](/images/random/titlepic/8.jpg)




评论