由于某些原因,我想使用脚本每 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
对你有好处。