告别手动操作!用Ansible user模块高效管理 Linux账户

在企业运维环境中,服务器的用户管理是一项基础但非常重要的任务。比如,当有新员工加入时,我们需要在多台服务器上为他们创建账户并分配合适的权限。而当员工离职或岗位发生变化时,我们也需要迅速禁用或删除他们的账户,以避免潜在的安全风险。

如果采用手动方式来完成这些任务,就需要在每台服务器上逐一执行一系列命令,比如 useraddpasswdchage 等,这不仅耗时费力,还容易出现错误。幸运的是,Ansible提供了一个非常方便的 user 模块,可以帮助我们高效地进行批量用户管理,从而确保操作的安全性和一致性。

user模块的核心功能

要了解user模块的详细用法,我们可以使用ansible-doc命令。只需运行以下命令即可查看相关信息:

ansible-doc -s user

成功执行上述命令后,会展示如下图的结果:

user模块提供了许多实用的功能,主要包括以下几点:

  • 创建或删除用户

  • 设置密码

  • 指定用户的UIDGID

  • 指定用户所属组

  • 创建home目录

  • 设定 Shell

  • 设定SSH公钥认证

常用参数说明:

参数作用
name指定用户名
statepresent(创建用户)或 absent(删除用户)
password用户密码(需加密)
uid指定用户UID
group指定用户所属组
groups指定用户附加的组
home指定 home目录路径
shell指定默认Shell,如 /bin/bash
create_home是否创建 home目录(默认yes
removeabsent时是否删除 home目录
expires指定密码过期时间(时间戳格式)

⚓实战案例分析

📝案例 1:批量创建开发团队账户

需求:为3名新入职开发人员创建账户,要求:

  • 创建主目录/home/dev_username

  • 加入dockergit附加组

  • 禁止SSH密码登录

  • 设置初始密码

- name: Create developer accounts
  hosts: dev_servers
  become: yes
  vars:
    developers:
      - { name: 'alice', uid: 2001 }
      - { name: 'bob',   uid: 2002 }
      - { name: 'charlie', uid: 2003 }
  
  tasks:
    - name: Create developer users
      ansible.builtin.user:
        name: "{{ item.name }}"
        uid: "{{ item.uid }}"
        groups: docker,git
        append: yes
        shell: /bin/bash
        password: "$6$rounds=656000$SAlt1234$XH6X8L8Dz4tdj.7WZ2TvWUDO2w/lk5sABC1234ABCDefgHIJKLmnopqrSTUVWXYZ"
        generate_ssh_key: yes
        ssh_key_bits: 4096
        create_home: yes
      loop: "{{ developers }}"

关键点说明:

  1. 使用loop实现批量创建

  2. password参数使用pythoncrypt生成的哈希密文

  3. 自动生成4096RSA密钥对

  4. 保持默认主组,同时附加到dockergit

通过执行如下命令,即可批量创建用户:

ansible-playbook Create_developer_accounts.yml

创建成功后可以看到如下图的结果:

📝案例 2:为运维账户配置Sudo权限

创建opsadmin账户并授予免密sudo权限

- name: Configure ops admin
  hosts: dev_servers
  become: yes
  tasks:
    - name: Create ops user
      ansible.builtin.user:
        name: opsadmin
        groups: wheel
        shell: /bin/bash
        comment: "Operations Administrator"
    
    - name: Configure passwordless sudo
      ansible.builtin.lineinfile:
        path: /etc/sudoers
        line: 'opsadmin ALL=(ALL) NOPASSWD:ALL'
        validate: 'visudo -cf %s'

validate: 'visudo -cf %s'

  • 在修改前使用 visudo -cf /etc/sudoers 进行语法检查。

  • 防止 sudoers 文件写错,避免系统无法使用sudo

 ansible-playbook  Configure_ops_admin.yml

成功执行上述命令后,您将会看到如下图所示的结果:

📝案例3:安全删除离职用户

需求:安全移除已离职员工账户,删除用户但保留主目录。

- name: Remove deprecated users
  hosts: dev_servers
  become: yes
  vars:
    departed_users: ['alice', 'bob']
  tasks:
    - name: Remove user accounts
      ansible.builtin.user:
        name: "{{ item }}"
        state: absent
        remove: no  # 不删除主目录
      loop: "{{ departed_users }}"

成功执行下面的命令后,会把定义的用户删除,但是会保留删除用户的家目录,如下图所示:

ansible-playbook  Remove_deprecated_users.yml

📝案例 4:禁用用户

需求:禁用 charlie账户,但不删除,确保其 home 目录仍然保留。

- name: 禁用用户
  hosts: dev_servers
  become: yes
  tasks:
    - name: 锁定 charlie 账户
      ansible.builtin.user:
        name: charlie
        password_lock: yes

成功执行如下命令会输入如下图的结果:

ansible-playbook lock_charlie.yml

总结

Ansibleuser模块为 Linux 服务器的用户管理提供了强大的自动化能力,可以大幅提升运维效率并减少人为失误。本文通过典型场景展示了以下关键功能:

  • 创建批量用户并分配权限

  • 为运维账号配置Sudo权限

  • 禁用用户

  • 删除用户并保留 home目录

通过这些案例,相信你已经掌握了 user 模块的基本用法,并能在实际工作中灵活应用。希望这篇教程能帮助你更轻松地管理服务器用户,提高运维自动化能力! 🚀

推荐阅读


  • 登录即见:打造服务器欢迎信息,提升用户体验
  • 自动化压缩新姿势!教你用Ansible Archive模块高效管理文件
  • 提升运维效率:Ansible systemd 模块操作技巧,让你告别繁琐命令行!
  • Ansible fetch模块详解:轻松从远程主机抓取文件
  • 告别手动编辑:如何用Python快速创建Ansible hosts文件?
  • 一分钟学会Ansible cron模块,高效管理你的定时任务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/966153.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++小等于的所有奇数和=最大奇数除2加1的平方。

缘由 三种思路解题&#xff1a;依据算术推导得到一个规律&#xff1a;小等于的所有奇数和等于最大奇数除以2加1的平方。将在后续发布&#xff0c;总计有十种推导出来的实现代码。 int a 0,aa 1,aaa 0;cin >> a; while (aa<a) aaa aa, aa 2;cout << aaa;i…

【CPP】CPP经典面试题

文章目录 引言1. C 基础1.1 C 中的 const 关键字1.2 C 中的 static 关键字 2. 内存管理2.1 C 中的 new 和 delete2.2 内存泄漏 3. 面向对象编程3.1 继承和多态3.2 多重继承 4. 模板和泛型编程4.1 函数模板4.2 类模板 5. STL 和标准库5.1 容器5.2 迭代器 6. 高级特性6.1 移动语义…

深入浅出谈VR(虚拟现实、VR镜头)

1、VR是什么鬼&#xff1f; 近两年VR这次词火遍网上网下&#xff0c;到底什么是VR&#xff1f;VR是“Virtual Reality”&#xff0c;中文名字是虚拟现实&#xff0c;是指采用计算机技术为核心的现代高科技手段生成一种虚拟环境&#xff0c;用户借助特殊的输入/输出设备&#x…

【Redis】安装配置Redis超详细教程 / Linux版

Linux安装配置Redis超详细教程 安装redis依赖安装redis启动redis停止redisredis.conf常见配置设置redis为后台启动修改redis监听地址设置工作目录修改密码监听的端口号数据库数量设置redis最大内存设置日志文件设置redis开机自动启动 学习视频&#xff1a;黑马程序员Redis入门到…

[LeetCode]day16 242.有效的字母异位词

242. 有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的 字母异位词 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输入: s "rat"…

[MoeCTF 2022]baby_file

题目 <html> <title>Heres a secret. Can you find it?</title> <?phpif(isset($_GET[file])){$file $_GET[file];include($file); }else{highlight_file(__FILE__); } ?> </html> 读取flag /?filephp://filter/readconvert.base64-encode…

Centos挂载镜像制作本地yum源,并补装图形界面

内网环境centos7.9安装图形页面内网环境制作本地yum源 上传镜像到服务器目录 创建目录并挂载镜像 #创建目录 cd /mnt/ mkdir iso#挂载 mount -o loop ./CentOS-7-x86_64-DVD-2009.iso ./iso #前面镜像所在目录&#xff0c;后面所挂载得目录#检查 [rootlocalhost mnt]# df -h…

判断您的Mac当前使用的是Zsh还是Bash:echo $SHELL、echo $0

要判断您的Mac当前使用的是Zsh还是Bash&#xff0c;可以使用以下方法&#xff1a; 查看默认Shell: 打开“终端”应用程序&#xff0c;然后输入以下命令&#xff1a; echo $SHELL这将显示当前默认使用的Shell。例如&#xff0c;如果输出是/bin/zsh&#xff0c;则说明您使用的是Z…

python 小游戏:扫雷

目录 1. 前言 2. 准备工作 3. 生成雷区 4. 鼠标点击扫雷 5. 胜利 or 失败 6. 游戏效果展示 7. 完整代码 1. 前言 本文使用 Pygame 实现的简化版扫雷游戏。 如上图所示&#xff0c;游戏包括基本的扫雷功能&#xff1a;生成雷区、左键点击扫雷、右键标记地雷、显示数字提示…

【重新认识C语言----文件管理篇】

目录 ​编辑 -----------------------------------------begin------------------------------------- 引言 1. 文件的基本概念 2. 文件指针 3. 文件的打开与关闭 3.1 打开文件 3.2 关闭文件 4. 文件的读写操作 4.1 读取文件 4.1.1 使用fgetc()读取文件 4.1.2 使用fg…

EasyExcel 导出合并层级单元格

EasyExcel 导出合并层级单元格 一、案例 案例一 1.相同订单号单元格进行合并 合并结果 案例二 1.相同订单号的单元格进行合并2.相同订单号的总数和总金额进行合并 合并结果 案例三 1.相同订单号的单元格进行合并2.相同订单号的商品分类进行合并3.相同订单号的总数和总金额…

WPF 进度条(ProgressBar)示例一

本文讲述&#xff1a;WPF 进度条(ProgressBar)简单的样式修改和使用。 进度显示界面&#xff1a;使用UserControl把ProgressBar和进度值以及要显示的内容全部组装在UserControl界面中&#xff0c;方便其他界面直接进行使用。 <UserControl x:Class"DefProcessBarDemo…

LabVIEW自定义测量参数怎么设置?

以下通过一个温度采集案例&#xff0c;说明在 LabVIEW 中设置自定义测量参数的具体方法&#xff1a; 案例背景 ​ 假设使用 NI USB-6009 数据采集卡 和 热电偶传感器 监测温度&#xff0c;需自定义以下参数&#xff1a; 采样率&#xff1a;1 kHz 输入量程&#xff1a;0~10 V&a…

新能源产业的质量革命:六西格玛培训如何重塑制造竞争力

在新能源行业狂飙突进的今天&#xff0c;企业若想在全球供应链中占据高地&#xff0c;仅靠技术突破已远远不够。制造效率的毫厘之差&#xff0c;可能成为市场话语权的千里之距。某光伏巨头曾因电池片良率低于行业均值1.5%&#xff0c;导致年损失超2.3亿元——这恰恰印证了六西格…

(11)gdb 笔记(4):设置执行方向 set exec-direction,

&#xff08;28&#xff09;引入 record 后&#xff0c;可以 设置执行方向 set exec-direction &#xff1a; 实践&#xff1a; &#xff08;29&#xff09; &#xff08;33&#xff09; 谢谢

redis持久化理论

0 前言 什么是持久化 redis操作都是在内存中&#xff0c;如果出现宕机的话&#xff0c;数据将不复存在&#xff0c;所以持久化是将内存中的数据刷盘到磁盘中&#xff0c;redis可以提供RDB和AOF将数据写入磁盘中。 一 持久化技术 本章节将介绍持久化RDB和AOF两个技术&#xf…

25/2/7 <机器人基础>雅可比矩阵计算 雅可比伪逆

雅可比矩阵计算 雅可比矩阵的定义 假设我们有一个简单的两个关节的平面机器人臂&#xff0c;其末端执行器的位置可以表示为&#xff1a; 其中&#xff1a; L1​ 和 L2 是机器人臂的长度。θ1​ 和 θ2是关节的角度。 计算雅可比矩阵 雅可比矩阵 JJ 的定义是将关节速度与末…

鸿蒙UI(ArkUI-方舟UI框架)- 使用文本

返回主章节 → 鸿蒙UI&#xff08;ArkUI-方舟UI框架&#xff09; 文本使用 文本显示 (Text/Span) Text是文本组件&#xff0c;通常用于展示用户视图&#xff0c;如显示文章的文字内容。Span则用于呈现显示行内文本。 创建文本 string字符串 Text("我是一段文本"…

科技赋能数字内容体验的核心技术探索

内容概要 在数字化时代&#xff0c;科技的迅猛发展为我们的生活和工作带来了深刻的变革。数字内容体验已经成为人们获取信息和娱乐的重要途径&#xff0c;而这背后的技术支持则扮演着至关重要的角色。尤其是在人工智能、虚拟现实和区块链等新兴技术的推动下&#xff0c;数字内…

详细教程 | 如何使用DolphinScheduler调度Flink实时任务

Apache DolphinScheduler 非常适用于实时数据处理场景&#xff0c;尤其是与 Apache Flink 的集成。DolphinScheduler 提供了丰富的功能&#xff0c;包括任务依赖管理、动态调度、实时监控和日志管理&#xff0c;能够有效简化 Flink 实时任务的管理和部署。通过 DolphinSchedule…