Linux命令之chpasswd命令

本文详细介绍了Linux系统中的chpasswd命令,包括其功能、使用示例、加密方法、参数说明以及实际应用场景,如批量修改用户密码和生成随机密码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、chpasswd命令简介

  chpasswd命令用于同时更改多个用户的密码。它可以从标准输入或指定的文件中读取用户名和密码的组合,并将其应用于系统中的用户。chpasswd命令通常用于批量更改用户密码,特别是在自动化脚本或批处理任务中,该命令需要root账户权限才可以执行。使用chpasswd命令时,可以通过以下两种方式提供用户名和密码的组合:

  • 从标准输入读取:可以通过管道或重定向操作符将用户名和密码的组合传递给chpasswd命令。每个用户名和密码的组合应占据一行,并使用冒号分隔用户名和密码。
  • 从文件读取:可以通过指定文件路径作为chpasswd命令的参数来读取用户名和密码的组合。文件中的每个用户名和密码的组合应占据一行,并使用冒号分隔用户名和密码。

二、chpasswd命令使用示例

1、获取命令帮助

[root@s152 ~]# chpasswd -h
用法:chpasswd [选项]

选项:
-c, --crypt-method 方法 加密方法(NONE DES MD5 SHA256 SHA512 中的一个)
-e, --encrypted 提供的密码已经加密
-h, --help 显示此帮助信息并推出
-m, --md5 使用 MD5 算法加密明文密码
-R, --root CHROOT_DIR chroot 到的目录
-s, --sha-rounds SHA* 加密算法中的 SHA 旁边的数字

2、修改单个用户密码

[root@s152 ~]# useradd username1
[root@s152 ~]# echo “username1:password1” | chpasswd
在这里插入图片描述

3、从标准输入批量修改用户密码

  输入chpasswd命令后直接回车,交互窗口下按照如下格式输入用户名和密码,使用ctl+D结束输入。

[root@s152 ~]# chpasswd
username1:123456
username2:123456
username3:12345678
[root@s152 ~]# su - username1
上一次登录:五 8月 25 15:24:34 CST 2023pts/0 上
[username1@s152 ~]$ su - username3
密码:
上一次登录:五 8月 25 15:47:27 CST 2023pts/0 上
最后一次失败的登录:五 8月 25 15:47:43 CST 2023pts/0 上
最有一次成功登录后有 1 次失败的登录尝试。

4、从文件读取密码批量修改用户密码

  当然我们也可以使用cat结合|管道符的方式,可以完成批量用户密码修改。

[root@s152 ~]# cat pass.txt
username1:1234567
username2:1234567
username3:12345678
[root@s152 ~]# cat pass.txt | chpasswd

5、使用密码密文修改用户密码

  我们可以使用openssl生成密码的密文内容,将密文内容写入到文件中,然后通过使用-e参数批量修改密码。

[root@s152 ~]# openssl passwd -1 Wuhs@pass
$1$1lP9KfKx$uj1QJqB4EjMXTGN9YOk3G1
[root@s152 ~]# cat pass.txt 
username1:$1$1lP9KfKx$uj1QJqB4EjMXTGN9YOk3G1
username2:$1$1lP9KfKx$uj1QJqB4EjMXTGN9YOk3G1
username3:$1$1lP9KfKx$uj1QJqB4EjMXTGN9YOk3G1
>[root@s152 ~]# cat pass.txt |chpasswd -e
[root@s152 ~]# su - username1           
上一次登录:五 8月 25 16:12:24 CST 2023pts/0 上
[username1@s152 ~]$ su - username2
密码:
上一次登录:五 8月 25 16:12:46 CST 2023pts/0 上
[username2@s152 ~]$ 

5、指定加密算法修改用户密码

[root@s152 ~]# cat pass2.txt
username1:123456
username2:12345678
username3:12345678
[root@s152 ~]# cat pass2.txt | chpasswd -m

三、使用语法及参数说明

1、使用语法

[root@s152 ~]# chpasswd [选项]

2、参数说明

参数参数说明
-c, --crypt-method 方法加密方法(NONE DES MD5 SHA256 SHA512 中的一个)
-e, --encrypted提供的密码已经加密
-h, --help显示此帮助信息并推出
-m, --md5使用 MD5 算法加密明文密码
-R, --root CHROOT_DIRchroot 到的目录
-s, --sha-roundsSHA* 加密算法中的 SHA 旁边的数字

四、chpasswd命令使用实践

1、修改主机所有普通用户密码为随机密码

  • 获取主机普通用户列表
[root@s152 ~]# grep -A100 "1000" /etc/passwd
wuhs:x:1000:1000::/home/wuhs:/bin/bash
username1:x:1001:1001::/home/username1:/bin/bash
username2:x:1002:1002::/home/username2:/bin/bash
username3:x:1003:1003::/home/username3:/bin/bash
user1:x:1004:1004::/home/user1:/bin/bash
user2:x:1005:1005::/home/user2:/bin/bash
user3:x:1006:1006::/home/user3:/bin/bash
  • 截取用户名
[root@s152 ~]# grep -A100 "1000" /etc/passwd |awk -F ":" '{print $1}'
wuhs
username1
username2
username3
user1
user2
user3
  • 生产随机密码
    为了主机安全,我们可以使用rand命令给每个用户生成随机密码。
    在这里插入图片描述
[root@s152 ~]# grep -A100 "1000" /etc/passwd |awk -F ":" '{print $1}'|while read username; do echo "$username:$(openssl rand -base64 12 | tr -d '/+=' | cut -c1-10)"; done
wuhs:5alFTKDlx4
username1:sk6cLRudWd
username2:dmXUNwtbfV
username3:9uSatzk4o5
user1:u7oyTpJNsU
user2:skPUFLSBph
user3:N9H26K9DAn
  • 写入密码文件
[root@s152 ~]# grep -A100 "1000" /etc/passwd |awk -F ":" '{print $1}'|while read username; do echo "$username:$(openssl rand -base64 12 | tr -d '/+=' | cut -c1-10)"; done > passwords.txt 
  • 批量修改用户密码
[root@s152 ~]# cat passwords.txt | chpasswd 

2、修改主机所有普通用户为指定密码

  • 获取用户列表并生成指定密码的密文文件
[root@s152 ~]# grep -A100 "1000" /etc/passwd |awk -F ":" '{print $1}'|while read username; do echo "$username:`openssl passwd -1 123456`"; done | tee > passwords.txt    
[root@s152 ~]# cat passwords.txt 
wuhs:$1$btyaR2sN$FveCHL1OmoXlxOchhGfcS0
username1:$1$G91mrc9c$Mk8WfCDlAdkF7rBeVqKRA/
username2:$1$w3fDQoya$IB68pOvfFsF8Q3o9.bl3S/
username3:$1$otFkp13s$XaKllMYpAEw..O86v5mGo.
user1:$1$NwidAVMb$dGtoik4PJveKhaD8ETwv6.
user2:$1$ILVS7XnP$N8LA9lu1UusMqaecEG33Z1
user3:$1$ybXJAUnb$oFLxTE4qi8J7/AuneQQzV0
  • 批量修改密码

[root@s152 ~]# cat passwords.txt |chpasswd -e
[root@s152 ~]# su - wuhs
上一次登录:五 8月 25 16:52:48 CST 2023pts/0 上
[wuhs@s152 ~]$ su - user1
密码:
上一次登录:五 8月 25 16:52:55 CST 2023pts/0 上

好的,接下来我将为您详细介绍 `chpasswd` 命令Linux 中的作用和使用方法。 ### chpasswd 概述 `chpasswd` 是一个用于批量用户密码的实用程序。它可以从标准输入读取一对或多对用户名和新密码,并据此更新系统中的相应账户信息。这个命令特别适用于需要一次性处理大量用户的情况,如初始化服务器环境或恢复默认设置的时候非常有用。 ### 基本语法 ```bash chpasswd [选项] ``` - `[选项]`: 可选参数列表,默认情况下无需指定任何选项即可完成大多数任务。 ### 参数详解 以下是几个常用的 `chpasswd` 参数及其含义: | 参数 | 描述 | | -------------- | ------------------------------------------------------------ | | `-c, --crypt-method METHOD` | 设置加算法 (METHOD) 来编码新密码。<br>支持的方式有 DES(默认)、MD5、SHA256 和 SHA512 等几种常见的散列函数类型。| | `-e, --encrypted` | 输入文件中的密码已经过适当加处理,不需要再次转换。 | | `-h, --help` | 显示帮助文档并退出。 | | `-m, --md5` | 强制使用 MD5 加格式。(注意:此选项已被弃用) | ### 使用示例 #### 示例 1 - 更单个用户的密码 假设我们想要变名为 `exampleUser` 的用户密码为其新的值 `"newPassword"` ,可以这样做: ```bash echo "exampleUser:newPassword" | sudo chpasswd ``` 这条命令会把来自 `stdin` 标准输入的数据传送给 `chpasswd` 实现目标账户的新密码设定工作。 #### 示例 2 - 使用文件作为输入源进行大批量 如果有一个文本文件叫做 `users.txt`,里面包含了成批待修的对象数据,每行形似於 `<username>:<password>` 形式的键值对,那么我们可以利用该文件快速地同步所有的变动至系统里头: ```bash sudo chpasswd < users.txt ``` 在这个例子中,`<` 符号表示重定向左侧路径所指向的内容当作命令右侧所需的标准输入流来对待。 #### 示例 3 - 修密码同时应用特定的哈希算法 有时为了满足某些安全策略的要求或者兼容旧版本软件产品的需求,你可能还想自定义选用另一种不同的散列技术来做这项工作: ```bash echo "anotherUser:securePassphrase" | sudo chpasswd -c SHA512 ``` 这行代码告诉 `chpasswd` 将后续给出的所有密码都按照 SHA-512 规则予以重新计算后再保存回去。 ### 注意事项 - **安全性**:<br> 直接在命令行上暴露未加掩饰的真实密码是非常危险的行为,建议尽可能通过管道传输预存储的形式提供敏感资料;另外,确保只有合法管理员能够接触到相关资源。 - **权限需求**:<br> 因为涉及到核心级别的身份验证动操作,所以通常都需要以 root 或者具备同等权利的角色运行上述指令才能生效。 如果您有任何进一步的问题或是想了解更多细节,请继续提问! --
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒悦sunsite

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值