Ansible自动化运维入门培训教材

admin 2026-02-03 01:17:34 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档系统介绍Ansible自动化运维入门知识,涵盖其无代理架构、环境搭建、Inventory清单及Playbook脚本编写。通过Ad-Hoc命令与实战项目演示服务器初始化与监控部署,总结调试技巧与安全规范。内容实战导向,旨在帮助初学者快速掌握批量服务器管理与运维自动化技能,提升工作效率。 综合评分: 75 文章分类: 其他


cover_image

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 → 服务器们(被管节点)

简单来说:

  1. 你在控制机上写”要做的事情”
  2. Ansible通过SSH连接到目标服务器
  3. 在目标服务器上执行任务
  4. 返回执行结果给你

第二部分:环境准备

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 安全建议

  1. 保护敏感信息:不要将密码明文写在Playbook中
  2. 使用变量文件:将敏感信息放在加密的变量文件中
  3. 限制权限:使用最小权限原则
  4. 定期备份:备份重要的Playbook和配置文件

第八部分:下一步学习建议

8.1 技能提升路径

  1. 初级阶段(已完成):
  • ✅ Ad-Hoc命令使用
  • ✅ 基础Playbook编写
  • ✅ 常用模块掌握
  1. 中级阶段:
  • 📚 学习Variables(变量)
  • 🔄 掌握Loops(循环)
  • ⚡ 理解Handlers(触发器)
  • 🏗️ 使用Roles(角色)
  1. 高级阶段:
  • 🔧 自定义模块开发
  • 📊 动态Inventory
  • 🚀 Ansible Tower/AWX
  • 🤖 与其他工具集成

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:运维星火燎原 刘军军 刘军军《Ansible 自动化运维入门培训教材》

PMBOK第八版概述 网络安全文章

PMBOK第八版概述

文章总结: PMBOK第八版实现了从流程导向到原则导向的变革,确立12项原则与6大绩效领域,聚焦价值交付与灵活性。它融合敏捷与混合方法,强调系统思维与利益相关者
评论:0   参与:  0