生成 Ansible Playbook 实现服务器配置自动化

以下是一个完整的 Ansible Playbook 示例,用于实现服务器基础配置自动化,包含用户管理、安全加固、软件安装和服务配置等核心功能:

---
- name: 服务器基础配置自动化
  hosts: all
  become: yes
  vars:
    admin_user: deploy
    ssh_port: 2222
    timezone: Asia/Shanghai
    packages:
      - nginx
      - fail2ban
      - ufw

  tasks:
    # 基础系统配置
    - name: 设置时区
      timezone:
        name: "{{ timezone }}"

    - name: 更新软件包索引
      apt:
        update_cache: yes

    # 用户管理
    - name: 创建管理员用户
      user:
        name: "{{ admin_user }}"
        groups: sudo
        append: yes
        shell: /bin/bash
        password: "{{ 'Password123' | password_hash('sha512') }}"

    - name: 配置SSH公钥认证
      authorized_key:
        user: "{{ admin_user }}"
        key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"

    # 安全加固
    - name: 修改SSH端口
      lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^#?Port'
        line: "Port {{ ssh_port }}"
      notify: 重启SSH服务

    - name: 禁用root登录
      lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^#?PermitRootLogin'
        line: "PermitRootLogin no"

    - name: 安装安全软件包
      apt:
        name: "{{ packages }}"
        state: present

    - name: 配置防火墙
      ufw:
        rule: allow
        port: "{{ ssh_port }}"
        proto: tcp
      when: "'ufw' in packages"

    # 服务配置
    - name: 配置Nginx默认页面
      copy:
        content: "Hello from Ansible!"
        dest: /var/www/html/index.nginx-debian.html
      when: "'nginx' in packages"

    - name: 确保服务运行
      service:
        name: "{{ item }}"
        state: started
        enabled: yes
      loop:
        - nginx
        - fail2ban

  handlers:
    - name: 重启SSH服务
      service:
        name: sshd
        state: restarted

使用说明
  1. 准备工作

    • 在控制节点安装 Ansible:sudo apt install ansible
    • 配置目标服务器清单 /etc/ansible/hosts
      [web_servers]
      server1 ansible_host=192.168.1.10
      server2 ansible_host=192.168.1.11
      

  2. 执行 Playbook

    ansible-playbook -i /etc/ansible/hosts server_setup.yml -K
    

功能说明
  1. 基础配置

    • 自动设置时区为东八区
    • 创建具有 sudo 权限的管理员账户
    • 配置 SSH 公钥认证
  2. 安全加固

    • 修改 SSH 默认端口为 2222
    • 禁用 root 远程登录
    • 安装配置 UFW 防火墙和 Fail2Ban
  3. 服务部署

    • 自动安装 Nginx 并设置默认页面
    • 确保关键服务开机自启
  4. 扩展建议

    # 添加数据库安装
    - name: 安装MySQL
      apt:
        name: mysql-server
        state: present
      
    # 配置环境变量
    - name: 设置JAVA_HOME
      lineinfile:
        path: /etc/environment
        line: 'JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"'
    

最佳实践:使用 Ansible Vault 加密敏感变量:

ansible-vault create secrets.yml

在 Playbook 中通过 vars_files 引入加密文件

此 Playbook 遵循幂等性原则,可安全重复执行。可根据实际需求调整 vars 部分变量值,或扩展 tasks 实现自定义配置。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐