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

如果采用手动方式来完成这些任务,就需要在每台服务器上逐一执行一系列命令,比如 useradd、passwd 和 chage 等,这不仅耗时费力,还容易出现错误。幸运的是,Ansible提供了一个非常方便的 user 模块,可以帮助我们高效地进行批量用户管理,从而确保操作的安全性和一致性。
⚓user模块的核心功能
要了解user模块的详细用法,我们可以使用ansible-doc命令。只需运行以下命令即可查看相关信息:
ansible-doc -s user
成功执行上述命令后,会展示如下图的结果:

user模块提供了许多实用的功能,主要包括以下几点:
-
创建或删除用户
-
设置密码
-
指定用户的
UID、GID -
指定用户所属组
-
创建
home目录 -
设定
Shell -
设定
SSH公钥认证
常用参数说明:
| 参数 | 作用 |
|---|---|
name | 指定用户名 |
state | present(创建用户)或 absent(删除用户) |
password | 用户密码(需加密) |
uid | 指定用户UID |
group | 指定用户所属组 |
groups | 指定用户附加的组 |
home | 指定 home目录路径 |
shell | 指定默认Shell,如 /bin/bash |
create_home | 是否创建 home目录(默认yes) |
remove | absent时是否删除 home目录 |
expires | 指定密码过期时间(时间戳格式) |
⚓实战案例分析
📝案例 1:批量创建开发团队账户
需求:为3名新入职开发人员创建账户,要求:
-
创建主目录
/home/dev_username -
加入
docker、git附加组 -
禁止
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 }}"
关键点说明:
使用
loop实现批量创建
password参数使用python中crypt生成的哈希密文自动生成
4096位RSA密钥对保持默认主组,同时附加到
docker和git组
通过执行如下命令,即可批量创建用户:
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

⚓总结
Ansible的user模块为 Linux 服务器的用户管理提供了强大的自动化能力,可以大幅提升运维效率并减少人为失误。本文通过典型场景展示了以下关键功能:
-
创建批量用户并分配权限
-
为运维账号配置
Sudo权限 -
禁用用户
-
删除用户并保留
home目录
通过这些案例,相信你已经掌握了 user 模块的基本用法,并能在实际工作中灵活应用。希望这篇教程能帮助你更轻松地管理服务器用户,提高运维自动化能力! 🚀
推荐阅读
- 登录即见:打造服务器欢迎信息,提升用户体验
- 自动化压缩新姿势!教你用Ansible Archive模块高效管理文件
- 提升运维效率:Ansible systemd 模块操作技巧,让你告别繁琐命令行!
- Ansible fetch模块详解:轻松从远程主机抓取文件
- 告别手动编辑:如何用Python快速创建Ansible hosts文件?
- 一分钟学会Ansible cron模块,高效管理你的定时任务
相关文章:
告别手动操作!用Ansible user模块高效管理 Linux账户
在企业运维环境中,服务器的用户管理是一项基础但非常重要的任务。比如,当有新员工加入时,我们需要在多台服务器上为他们创建账户并分配合适的权限。而当员工离职或岗位发生变化时,我们也需要迅速禁用或删除他们的账户,…...
java 8 在 idea 无法创建 java spring boot 项目的 变通解决办法
java 8 在 idea 无法创建 java spring boot 项目的 变通解决办法 spring boot 3 官方强制 要用 java 17 ,但是 不想安装java 17的 ,但是又想 使用 spring boot ,可以这样 : 在这个网站 https://start.aliyun.com/ 选择 你相对…...
javaEE初阶————多线程初阶(3)
大家新年快乐呀,今天是第三期啦,大家前几期的内容掌握的怎么样啦? 1,线程死锁 1.1 构成死锁的场景 a)一个线程一把锁 这个在java中是不会发生的,因为我们之前讲的可重入机制,在其他语言中可…...
eggnog后kegg结果提取和注释
首先进入KEGG BRITE: KEGG Orthology (KO) 下载json文件 用python处理一下 import json import re import osos.chdir("C:/Users/fordata/Downloads/") with open("ko00001.json","r") as f:fj f.read()kojson json.loads(fj)with open(&qu…...
shell脚本控制——处理信号
Linux利用信号与系统中的进程进行通信。你可以通过对脚本进行编程,使其在收到特定信号时执行某些命令,从而控制shell脚本的操作。 1.重温Linux信号 Linux系统和应用程序可以产生超过30个信号。下表列出了在shell脚本编程时会遇到的最常见的Linux系统信…...
Doris更新某一列数据完整教程
在Doris,要更新数据,并不像mysql等关系型数据库那样方便,可以用update set来直接更新某个列。在Doris只能进行有限的更新,官方文档如下: UPDATE - Apache Doris 1、使用Doris自带的Update功能 描述 该语句是为进行对数据进行更新的操作,UPDATE 语句目前仅支持 UNIQUE…...
VIVADO生成DCP和EDF指南
VIVADO生成DCP和EDF 文章目录 VIVADO生成DCP和EDF前言一、DCP封装二、EDF封装 前言 详细步骤就不贴图了,网上一大堆 在Vivado中,常用的三种封装形式有三种: ● IP ● edif ● dcp 在下文之前,先看几个概念 out_of_context&…...
Python中字节顺序、大小与对齐方式:深入理解计算机内存的底层奥秘
在计算机科学的世界里,理解数据的存储方式是每个程序员必备的技能。无论是处理网络通信、文件读写,还是进行底层系统编程,字节顺序(Endianness)、数据大小(Size)和对齐方式(Alignmen…...
在亚马逊云科技上云原生部署DeepSeek-R1模型(上)
DeepSeek-R1在开源版本发布的第二天就登陆了亚马逊云科技AWS云平台,这个速度另小李哥十分震惊。这又让我想起了在亚马逊云科技全球云计算大会re:Invent2025里,亚马逊CEO Andy Jassy说过的:随着目前生成式AI应用规模的扩大,云计算的…...
Redis实现分布式锁详解
前言 用 Redis 实现分布式锁,是我们常见的实现分布式锁的一种方式 下面是 redis 实现 分布式锁的四种方式,每种方式都有一定的问题,直到最后的 zookeeper 先透露一下: Redission 解决了 set ex nx 无法自动续期的问题 RedLo…...
表单标签(使用场景注册页面)
表单域(了解即可,还要到学习服务器阶段才可以真正送到后台) 定义了一个区域了之后,可以把这部分区域发送到后台上 <form action“url地址” method“提交方式” name"表单域名称">各种表单元素控件 </form>…...
c++ template-3
第 7 章 按值传递还是按引用传递 从一开始,C就提供了按值传递(call-by-value)和按引用传递(call-by-reference)两种参数传递方式,但是具体该怎么选择,有时并不容易确定:通常对复杂类…...
【创建模式-单例模式(Singleton Pattern)】
赐萧瑀 实现方案饿汉模式懒汉式(非线程安全)懒汉模式(线程安全)双重检查锁定静态内部类 攻击方式序列化攻击反射攻击 枚举(最佳实践)枚举是一种类 唐 李世民 疾风知劲草,板荡识诚臣。 勇夫安识义,智者必怀仁…...
攻防世界你猜猜
打开题目发现是一串十六进制的数据 我尝试解码了一下没发现什么,最后找了一下发现因为这是504B0304开头的所以是一个zip文件头 用python代码还原一下 from Crypto.Util.number import * f open("guess.zip","wb") s 0x504B03040A0001080000…...
【Axure教程】标签版分级多选下拉列表
分级多选下拉列表是指一个下拉列表,它包含多个层次的选项,用户可以选择一个或多个选项。这些选项通常是根据某种层级关系来组织的,例如从上到下有不同的分类或者过滤条件,用户选择上层选项后,下层选项会发生变化&#…...
DeepSeek图解10页PDF
以前一直在关注国内外的一些AI工具,包括文本型、图像类的一些AI实践,最近DeepSeek突然爆火,从互联网收集一些资料与大家一起分享学习。 本章节分享的文件为网上流传的DeepSeek图解10页PDF,免费附件链接给出。 1 本地 1 本地部…...
Centos7 停止维护,docker 安装
安装docker报错 执行docker安装命令:sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin,出现如下错误 更换yum源 [rootlocalhost yum.repos.d]# sudo mv /etc/yum.repos.d/CentOS-Base.repo /et…...
日志级别修改不慎引发的一场CPU灾难
背景 今天下午16.28有同事通过日志配置平台将某线上应用部分包的日志等级由error调为info,进而导致部分机器CPU升高,甚至有机器CPU达到100%,且ygc次数增加,耗时增加到80~100ms。 故障发现与排查 16.28陆续出现线上C…...
FPGA实现SDI视频缩放转UltraScale GTH光口传输,基于GS2971+Aurora 8b/10b编解码架构,提供2套工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案本博已有的 SDI 编解码方案我这里已有的FPGA图像缩放方案 3、工程详细设计方案工程设计原理框图SDI 输入设备GS2971芯片BT1120转RGB…...
二级C语言题解:矩阵主、反对角线元素之和,二分法求方程根,处理字符串中 * 号
目录 一、程序填空📝 --- 矩阵主、反对角线元素之和 题目📃 分析🧐 二、程序修改🛠️ --- 二分法求方程根 题目📃 分析🧐 三、程序设计💻 --- 处理字符串中 * 号 题目…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
