当前位置: 首页 > article >正文

告别手动操作!用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 accountshosts: dev_serversbecome: yesvars:developers:- { name: 'alice', uid: 2001 }- { name: 'bob',   uid: 2002 }- { name: 'charlie', uid: 2003 }tasks:- name: Create developer usersansible.builtin.user:name: "{{ item.name }}"uid: "{{ item.uid }}"groups: docker,gitappend: yesshell: /bin/bashpassword: "$6$rounds=656000$SAlt1234$XH6X8L8Dz4tdj.7WZ2TvWUDO2w/lk5sABC1234ABCDefgHIJKLmnopqrSTUVWXYZ"generate_ssh_key: yesssh_key_bits: 4096create_home: yesloop: "{{ developers }}"

关键点说明:

  1. 使用loop实现批量创建

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

  3. 自动生成4096RSA密钥对

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

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

ansible-playbook Create_developer_accounts.yml

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

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

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

- name: Configure ops adminhosts: dev_serversbecome: yestasks:- name: Create ops useransible.builtin.user:name: opsadmingroups: wheelshell: /bin/bashcomment: "Operations Administrator"- name: Configure passwordless sudoansible.builtin.lineinfile:path: /etc/sudoersline: '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 usershosts: dev_serversbecome: yesvars:departed_users: ['alice', 'bob']tasks:- name: Remove user accountsansible.builtin.user:name: "{{ item }}"state: absentremove: no  # 不删除主目录loop: "{{ departed_users }}"

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

ansible-playbook  Remove_deprecated_users.yml

📝案例 4:禁用用户

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

- name: 禁用用户hosts: dev_serversbecome: yestasks:- name: 锁定 charlie 账户ansible.builtin.user:name: charliepassword_lock: yes

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

ansible-playbook lock_charlie.yml

总结

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

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

  • 为运维账号配置Sudo权限

  • 禁用用户

  • 删除用户并保留 home目录

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

推荐阅读


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

相关文章:

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

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

将Windows下的USB设备共享给WSL(ubuntu)

前言 本文用于学习记录,文中提到的方法也来自于网上资料,如有不对请指出,谢谢! 微软官方参考链接:https://learn.microsoft.com/zh-cn/windows/wsl/connect-usb 如果没有特殊标注,以下命令均在Windows终…...

lneaught SyntaxError :lnexpected tokenPIaYE(at chunk 5728.bdff1b31.is:1:1)

1.遇到问题: lneaught SyntaxError :lnexpected tokenPIaYE(at chunk 5728.bdff1b31.is:1:1) 当我部署到nginx上之后,第一次测试 没有啥问题当我点击登录之后,然后测试一个删除按钮之后就爆这个错误。 2.原因分析: 我遇到的是缓…...

Vue el-input密码输入框 按住显示密码,松开显示*;阻止浏览器密码回填,自写密码输入框;校验输入非汉字内容;文本框聚焦到内容末尾;

输入框功能集合 <template><div style"padding: 10px"><!-- 密码输入框 --><el-input:type"inputType"v-model"password"placeholder"请输入密码"auto-complete"new-password"id"pwd"style…...

Three.js实现炫酷图片粒子化效果:从聚合到扩散的动态演变

一、效果展示 本特效实现了一个基于图片像素的智能粒子系统&#xff0c;通过Three.js引擎驱动&#xff0c;呈现出以下惊艳效果&#xff1a; 图片粒子化&#xff1a;将任意图片转化为动态粒子系统智能聚合扩散&#xff1a;粒子在聚合状态与随机扩散状态间自然过渡物理运动模拟…...

MySQL中like模糊查询如何优化?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL中like模糊查询如何优化&#xff1f;】面试题。希望对大家有帮助&#xff1b; MySQL中like模糊查询如何优化&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中&#xff0c;LIKE模糊查询通常会影…...

为什么使用nohup 和 启动的python脚本,进程还在,但是不处理数据

使用 nohup 和 & 启动 Python 脚本后&#xff0c;进程仍然在运行但不处理数据&#xff0c;可能有几个原因&#xff1a; 1. 脚本内部问题&#xff08;例如死循环、阻塞&#xff09; Python 脚本内部可能存在阻塞操作或死循环&#xff0c;导致进程不执行预期的任务。你可以…...

Android 约束布局ConstraintLayout整体链式打包居中显示

Android 用约束布局ConstraintLayout实现将多个控件视作一个整体居中显示&#xff0c;使用 app:layout_constraintHorizontal_chainStyle"packed"实现 chain 除了链条方向有横向和竖向区分外&#xff0c; chain链条上的模式有 3种 spread - 元素将被展开&#…...

在 MySQL 8 中配置主从同步(主从复制)是一个常见的需求,用于实现数据的冗余备份、读写分离等。

在 MySQL 8 中配置主从同步(主从复制)是一个常见的需求,用于实现数据的冗余备份、读写分离等。以下是详细的配置步骤: 一、环境准备 假设你有两台 MySQL 服务器: 主服务器(Master):IP 地址为 192.168.1.100,端口为 3306从服务器(Slave):IP 地址为 192.168.1.101,…...

4 前端前置技术(上):AJAX技术、Axios技术(前端发送请求)

文章目录 前言一、Ajax技术&#xff08;从服务端获取数据&#xff0c;发送各种请求&#xff09;0 接口文档管理&#xff1a;使用apipost等接口测试软件创建接口便于前端后端分离测试1 基本概念2 原生Ajax使用示例&#xff08;几年前的早期用法&#xff09; 二、 Axios技术(对原…...

【自学笔记】Python的基础知识点总览-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Python基础知识总览1. Python简介2. 安装与环境配置3. 基本语法3.1 变量与数据类型3.2 控制结构3.3 函数与模块3.4 文件操作 4. 面向对象编程&#xff08;OOP&#…...

lambda表达式写java比较器

文章目录 示例 1&#xff1a;按字符串长度比较示例 2&#xff1a;按数字大小比较示例 3&#xff1a;按对象属性比较&#xff08;简洁&#xff1a;推荐&#xff09;示例 4&#xff1a;使用 Comparator 的静态方法示例 5&#xff1a;链式比较 在Java中&#xff0c;Comparator 是一…...

vim modeline

1. 什么是 Vim 模型行&#xff08;modeline&#xff09;&#xff1f; Vim 模型行是嵌入在文件中的特殊注释行&#xff0c;用于告诉 Vim 编辑器如何配置编辑选项。它的语法格式如下&#xff1a; # vim: 选项1值1:选项2值2:...它以 # vim: 开头&#xff08;# 是注释符&#xff…...

【赵渝强老师】Spark RDD的依赖关系和任务阶段

Spark RDD彼此之间会存在一定的依赖关系。依赖关系有两种不同的类型&#xff1a;窄依赖和宽依赖。 窄依赖&#xff1a;如果父RDD的每一个分区最多只被一个子RDD的分区使用&#xff0c;这样的依赖关系就是窄依赖&#xff1b;宽依赖&#xff1a;如果父RDD的每一个分区被多个子RD…...

前缀和练习——洛谷P8218:求区间和

题目: 这道题很简单&#xff0c;直接根据题目无脑套公式 代码&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1e5 9; using ll long long; ll a[N], perfix[N]; int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);//取消同步输…...

Python----Python高级(并发编程:线程Thread,多线程,线程间通信,线程同步,线程池)

一、线程Thread 1.1、线程 线程&#xff08;Thread&#xff09;是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位线程是程序执行的最小单位&#xff0c;而进程是操作系统分配资源的最小单位&#xff1b;一个进程由一个或多个线程…...

八大排序算法细讲

目录 排序 概念 运用 常见排序算法 插入排序 直接插入排序 思想&#xff1a; 步骤&#xff08;排升序&#xff09;: 代码部分&#xff1a; 时间复杂度&#xff1a; 希尔排序 思路 步骤 gap的取法 代码部分&#xff1a; 时间复杂度&#xff1a; 选择排序 直接选…...

组合总和III(力扣216)

这道题在回溯的基础上加入了剪枝操作。回溯方面我就不过多赘述&#xff0c;与组合(力扣77)-CSDN博客 大差不差&#xff0c;主要讲解一下剪枝(下面的代码也有回溯操作的详细注释)。我们可以发现&#xff0c;如果我们递归到后面&#xff0c;可能集合过小&#xff0c;无法满足题目…...

鲜牛奶订购系统的设计与实现

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 基…...

python:内置函数与高阶函数

1.内置函数 abs() round() print(abs(-6))#求绝对值 print(round(3.56))#四舍五入运行结果 6 4 2.高阶函数 高阶函数&#xff1a;把一个函数作为参数传递给另外一个函数 实例一&#xff1a;绝对值加减法与四舍五入 def add_num(a,b):return abs(a)abs(b) print(add_num…...

postgresql 函数错误捕捉

BEGIN 逻辑块 EXCEPTION WHEN 错误码&#xff08;如&#xff1a;unique_violation&#xff09; or others THEN 异常逻辑块 END; 在PL/pgSQL函数中&#xff0c;如果没有异常捕获&#xff0c;函数会在发生错误时直接退出&#xff0c;与其相关的事物也会随之回滚。我们可以通过使…...

Java面试场景题分享

假设你在做电商秒杀活动&#xff0c;秒杀开始时&#xff0c;成千上万的用户同时请求抢购商品。你会如何设计系统来处理这些请求&#xff0c;确保库存不超卖 你如何保证库存的准确性&#xff1f; 这个问题引导你思考如何在高并发下确保库存更新的原子性&#xff0c;最直接的方式…...

ESP32开发学习记录---》GPIO

she 2025年2月5日&#xff0c;新年后决定开始充电提升自己&#xff0c;故作此记,以前没有使用过IDF开发ESP32因此新年学习一下ESP32。 ESPIDF开发环境配置网上已经有很多的资料了&#xff0c;我就不再赘述&#xff0c;我这里只是对我的学习经历的一些记录。 首先学习一个…...

【PyTorch】解决Boolean value of Tensor with more than one value is ambiguous报错

理解并避免 PyTorch 中的 “Boolean value of Tensor with more than one value is ambiguous” 错误 在深度学习和数据科学领域&#xff0c;PyTorch 是一个强大的工具&#xff0c;它允许我们以直观和灵活的方式处理张量&#xff08;Tensor&#xff09;。然而&#xff0c;即使…...

文件 I/O 和序列化

文件I/O C#提供了多种方式来读写文件&#xff0c;主要通过System.IO命名空间中的类来实现&#xff0c;下方会列一些常用的类型&#xff1a; StreamReader/StreamWriter&#xff1a;用于以字符为单位读取或写入文本文件。 BinaryReader/BinaryWriter&#xff1a;用于以二进制格…...

python中的lambda function(ChatGPT回答)

Python 中的 lambda 函数是一个匿名函数&#xff0c;它没有名字&#xff0c;通常用于定义简单的、一次性使用的函数。它可以接受任意数量的参数&#xff0c;但只能有一个表达式&#xff0c;并且该表达式的结果就是返回值。 lambda 函数的语法是&#xff1a; lambda 参数1, 参…...

智慧停车系统:不同规模停车场的应用差异与YunCitys解决方案

在智慧停车领域&#xff0c;不同规模停车场因自身特点&#xff0c;对智慧停车系统的需求和应用效果存在显著差异。云创智城凭借丰富的经验和先进的技术&#xff0c;为各类规模停车场打造了贴合需求的智慧停车系统&#xff0c;下面为您详细剖析。 小型停车场&#xff1a;精准高…...

AI软件栈:LLVM分析(三)

LLVM IR 文章目录 CFG线性IR 主要采用CFG与线性IR组合描述 CFG *关键在于基本块&#xff08;Basic Block&#xff09;的定义 线性IR *关键来自于SSA&#xff0c;单静态赋值...

C++Primer逻辑和关系运算符

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

从BIO到NIO:Java IO的进化之路

引言 在 Java 编程的世界里&#xff0c;输入输出&#xff08;I/O&#xff09;操作是基石般的存在&#xff0c;从文件的读取写入&#xff0c;到网络通信的数据传输&#xff0c;I/O 操作贯穿于各种应用程序的核心。BIO&#xff08;Blocking I/O&#xff0c;阻塞式 I/O&#xff0…...