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 可重复执行、标准化配置、批量管理主机,大幅提升运维效率
相关推荐
Yan-英杰7 分钟前
从零玩转搜索引擎 API: 多引擎整合实战
服务器·前端·microsoft
枕星而眠14 分钟前
C++ 面向对象核心机制深度解析:多态性、虚函数、虚继承与 final 类
运维·开发语言·c++·后端
着迷不白22 分钟前
八、shell脚本
linux·运维
tobias.b23 分钟前
JumpServer4\.10\.16离线部署\+外部Nginx反向代理 解决30分钟空闲断开WebSocket超时(延长10天)
运维·websocket·nginx
爱装代码的小瓶子42 分钟前
3. 设计buffer模块
linux·服务器·开发语言·c++·php
流浪0011 小时前
Linux系统篇(四):一文吃透 Linux 虚拟地址空间:从页表映射到内核结构体全链路拆解
linux·运维·服务器
Jacob程序员1 小时前
WebSSH技术实现全解析
linux·运维·服务器·websocket
暗冰ཏོ1 小时前
运维岗位完整学习指南:从 Linux 基础到 DevOps / SRE 实战
linux·运维·服务器·ubuntu·运维开发·devops
龙泉寺天下行走1 小时前
bash (())奇怪的返回码
linux·运维·服务器
Fcy6481 小时前
Linux下 进程间通信详解(二)System V IPC
linux·运维·消息队列·共享内存·信号量·system v