openEuler 环境下 Ansible Playbook 实战:批量创建用户并修改 Shell 属性

一、实验环境

  • 操作系统:openEuler
  • 控制节点:test01(已部署 Ansible)
  • 被控节点:test01(已配置 SSH 免密登录)
  • 核心要求:关闭被控端信息收集、单 Play 多任务创建用户、独立 Play 修改用户 Shell

二、实验需求

  1. 编写名为 test1.yaml 的 Ansible Playbook
  2. 关闭被控端 facts 信息收集(gather_facts: no
  3. 第一个 Play:通过两个任务 创建 admin01admin02 两个用户
  4. 第二个 Play:修改 admin01 的登录 Shell 为 /bin/sh
  5. 完成语法检查、执行 Playbook、结果说明

三、编写 Playbook

创建 test1.yaml 文件,内容如下(规范缩进、无语法错误、可直接运行):

yaml

复制代码
---
# Play1:创建两个普通用户,关闭信息收集
- name: Create two Linux users
  hosts: test01
  gather_facts: no  # 关闭被控端系统信息收集

  tasks:
    # 任务1:创建用户admin01
    - name: Create user admin01
      ansible.builtin.user:
        name: admin01
        state: present

    # 任务2:创建用户admin02
    - name: Create user admin02
      ansible.builtin.user:
        name: admin02
        state: present

# Play2:修改admin01的登录shell为/bin/sh
- name: Modify user login shell
  hosts: test01
  gather_facts: no

  tasks:
    - name: Change admin01 shell to /bin/sh
      ansible.builtin.user:
        name: admin01
        shell: /bin/sh
        state: present

脚本核心说明

  1. gather_facts: no:关闭被控端信息收集,提升执行效率
  2. 两个独立 Play:实现创建用户修改属性解耦
  3. user 模块:Ansible 内置模块,安全稳定管理 Linux 用户
  4. shell: /bin/sh:限制用户交互式登录,提升系统安全性

四、Playbook 语法检查

执行前必须校验语法,避免运行时报错:

复制代码
ansible-playbook --syntax-check test1.yaml

执行结果

复制代码
playbook: test1.yaml

输出以上内容代表语法完全正确,无缩进、格式等问题。

五、执行 Playbook

一键执行剧本,完成用户创建与属性修改:

复制代码
ansible-playbook test1.yaml

完整执行输出

六、执行结果详细说明

1. 阶段执行说明

  • PLAY [Create two Linux users]:第一个剧本启动,负责创建两个用户
    • TASK [Create user admin01]:成功创建用户 admin01,状态 changed
    • TASK [Create user admin02]:成功创建用户 admin02,状态 changed
  • PLAY [Modify user login shell]:第二个剧本启动,负责修改用户 Shell
    • TASK [Change admin01 shell to /bin/sh]:成功修改 admin01 登录 Shell,状态 changed

2. PLAY RECAP 状态说明

  • ok=3:3 个任务全部执行成功
  • changed=3:3 个任务对系统状态进行了修改(2 个用户创建 + 1 个属性修改)
  • unreachable=0:被控主机 test01 网络连通正常
  • failed=0:无任务执行失败

七、验证实验结果(可选)

在被控端执行命令,查看用户信息:

复制代码
cat /etc/passwd | grep admin

验证结果

复制代码
admin01:x:1001:1001::/home/admin01:/bin/sh
admin02:x:1002:1002::/home/admin02:/bin/bash

可以看到:

  • admin01 登录 Shell 已修改为 /bin/sh(受限安全模式)
  • admin02 保持默认 Shell /bin/bash

八、实验总结

  1. 本实验基于 openEuler 环境,完成了 Ansible Playbook 从编写到执行的全流程
  2. 通过 gather_facts: no 优化了剧本执行效率
  3. 实现了批量创建用户、批量修改用户属性的自动化操作
  4. 修改 Shell 为 /bin/sh 符合 Linux 运维安全规范,限制用户交互式登录
  5. Ansible Playbook 可重复执行、标准化配置、批量管理主机,大幅提升运维效率
相关推荐
薛定猫AI1 小时前
Codex 与 Claude Code 全平台安装配置指南(Windows / macOS / Linux)
linux·windows·macos
仙柒4154 小时前
Docker原理
运维·docker·容器
茉莉玫瑰花茶8 小时前
工作流的常见模式 [ 1 ]
java·服务器·前端
米高梅狮子8 小时前
第2章 docker容器
运维·docker·云原生·容器·架构·kubernetes·自动化
kidwjb9 小时前
信号量在进程中的使用
linux·进程间通信
闵孚龙9 小时前
Claude Code Ultraplan 远程多代理规划全解析:AI Agent、CCR远程容器、异步规划、状态机、计划传送与企业级自动化治理
运维·人工智能·自动化
南京码讯光电技术有限公司10 小时前
工业无线AP选型指南:从WiFi 5到WiFi 6+5G CPE,如何构建全覆盖、零漫游、高可靠的智能工厂网络?
服务器·网络·5g
sulikey10 小时前
个人Linux操作系统学习笔记2 - gcc与库的理解
linux·笔记·学习·操作系统·gcc·
二宝哥11 小时前
Linux虚拟机网络配置
linux·运维·服务器
卧室小白11 小时前
docker网络与服务编排与集群
运维·docker·容器