Linux下非交互式修改密码(含结合crontab定期改密)

1. 关于chpasswd

  chpasswd 命令用于 Linux 系统中用于批量修改用户的密码。它通常与 shell 脚本结合使用,以便高效地更新多个用户的密码信息。

chpasswd 命令的基本语法:

chpasswd [options] [file]

参数解释:

  • - [options]: 可以指定一些选项来改变 chpasswd 的行为。
  • - file: 可选参数,指定包含用户名和新密码的文件路径。如果未指定文件,则从标准输入读取。

常见[options]选项

  • -e: 将密码转换为加密格式后存储。
  • -h <hash>: 使用指定的哈希算法(如 SHA-512)来加密密码。
  • -R <directory>: 指定 shadow 文件所在的目录。

chpasswd 命令要求输入的格式为每行一个用户,格式如下:

username:password

  • - username:指定要更改密码的用户账户名;
  • - password:指定新密码。如果密码为空,表示删除该用户的密码;

2. chpasswd基础使用示例

假设你有一个文本文件 users.txt,其中包含了需要更改密码的用户列表,格式如下:

john:mynewpassword

jane:newpass123

然后你可以使用以下命令来批量更改这些用户的密码:

chpasswd < users.txt

如果你想通过标准输入来提供用户列表,可以这样做:

echo "john:mynewpassword" | chpasswd

当然,你也可以使用多行输入:

cat <<EOF | chpasswd
john:mynewpassword
jane:newpass123
EOF

注意事项

- 使用 chpasswd 时,请确保提供的密码符合系统安全策略,通常情况下,密码应该足够复杂,并且符合 /etc/login.defs 文件中的密码策略设置。

- chpasswd 命令通常需要 root 权限才能执行,因为修改密码涉及系统安全。

3. 生产运维示例

假设你需要创建一个脚本来批量更改一组用户的密码,你可以创建一个简单的 shell 脚本,如下所示:

#!/bin/bash

# 定义包含用户和密码的文件
users_file="users.txt"

# 检查文件是否存在
if [ ! -f "$users_file" ]; then
    echo "File $users_file does not exist."
    exit 1
fi
# 使用 chpasswd 命令批量更改密码
chpasswd < "$users_file"

在这个示例中,你需要先准备一个名为 users.txt 的文件,其中每一行都是用户名和新密码,格式为 username:password。

4. 结合Linux下的crontab周期性修改密码

(1)创建密码文件及改密脚本:

touch /etc/init.d/changpw.sh
echo '#!/bin/bash' >>/etc/init.d/changpw.sh
echo 'users_file="users.txt" >>/etc/init.d/changpw.sh
echo ' chpasswd < "$users_file" >>/etc/init.d/changpw.sh
chmod 700 /etc/init.d/changpw.sh

(2)添加crontab

注意事项:在使用crontab修改密码时,对于新手而言有一个常见的困惑就是crontab执行后未按预期修改了密码,反而是密码未被成功修改。造成此问题的原因在于crontab环境变量加载不全,导致调用shell脚本中指定的命名失败。解决办法:在crontab文件中添加环境变量,例如下面的演示:

a.CentOS、Kylin序列操作系统:
touch /var/spool/cron/root
chmod 600 /var/spool/cron/root
echo " " >> /var/spool/cron/root
sed -i '$a SHELL=/bin/bash\nPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin\n\n\n00 05 1 */3 * /etc/init.d/changpw.sh >/dev/null 2>&1' /var/spool/cron/root

b.SUSE序列操作系统:
touch /var/spool/cron/tabs/root
chmod 600 /var/spool/cron/tabs/root
echo " " >> /var/spool/cron/tabs/root
sed -i '$a SHELL=/bin/bash\nPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin\n\n\n00 05 1 */3 * /etc/init.d/changpw.sh >/dev/null 2>&1' /var/spool/cron/tabs/root

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

南山南北山北

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

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

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

打赏作者

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

抵扣说明:

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

余额充值