在脚本中更改用户密码不起作用

在脚本中更改用户密码不起作用

由于某些原因,我想使用脚本每 X 分钟将用户的密码更改为随机密码。这是一台 debian 机器,以下脚本通过 root 的 crontab 启动@reboot并且脚本正在运行。每 X 分钟,新密码就会写入脚本中指定的文件,但是密码永远不会更改。

#!/bin/bash
# change user's password to a random one on boot and every five minutes

while : ; do
    npasswd=$(pwgen 8 1)
    echo "$npasswd" > /root/current-user-passwd.txt
    usermod --password $(openssl passwd -1 "$npasswd") user
#   echo "$npasswd" | passwd user
#   usermod -p $(perl -e "print crypt("$npasswd","Q4")") user
    sleep 300
done

我已经尝试了三种方法中的每一种(其他两种现在已被注释掉),但没有任何效果。但是,当我复制全部的脚本并将其粘贴到终端中即可运行它,它工作得很好。如果它是由 cron 启动的,那么它在脚本中就不起作用。

有谁知道这是怎么回事?顺便说一下,
我也尝试过,结果相同。echo -n我还尝试$npasswd在脚本中设置固定的内容,只是为了测试它,结果相同。

只是为了澄清:我真的在寻找一个可以解释的答案为什么这是手动工作的,但不是在脚本中,不是更改密码的替代方法。那些方法做工作,只是如果脚本是由 cron 启动的话就不会。

脚本的输出位于set -o errexit -o nounset -o xtrace顶部:

+ :
++ pwgen 8 1
+ npasswd=eiZeed5u
+ echo eiZeed5u
++ openssl passwd -1 eiZeed5u
+ usermod --password '$1$EYRCYJXm$5XkrVNxdrYRzxBmcRwuXm0' user
+ sleep 300

通过 cron 启动时的上述输出@reboot

+ :
+ pwgen 8 1
+ npasswd=aizof5Ka
+ echo aizof5Ka
+ openssl passwd -1 aizof5Ka
+ usermod --password $1$KFrgibYH$e1dMUeF2AzTtSPExBjbXo1 user
/root/change-user-passwd.sh: 8: /root/change-user-passwd.sh: usermod: not found

这让我现在清楚了这个问题,谢谢@l0b0

答案1

根据: https://stackoverflow.com/questions/714915/using-the-passwd-command-from-within-a-shell-script

echo "$npasswd" | passwd --stdin user

或者

echo "user:$npasswd" | chpasswd

对你有好处。

相关内容