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 可重复执行、标准化配置、批量管理主机,大幅提升运维效率
相关推荐
AlfredZhao1 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐2 天前
Linux内存扩容指南
linux
zylyehuo3 天前
Linux 彻底且安全地删除文件
linux
用户805533698033 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297913 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
乘云数字DATABUFF3 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
Web3探索者5 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo5 天前
Linux系统中网线与USB网络共享冲突
linux
荣--5 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森5 天前
动手实战学 Docker — 从零到集群编排完全指南
运维