出于某些原因,我希望使用脚本每隔X分钟将用户的密码更改为随机密码。它是一台debian机器,下面的脚本是通过根的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
设置为固定的,只是为了测试它,结果是相同的。
Just to clearify:我真的在寻找一个答案,它解释了为什么这是手动工作的,但不是在脚本中,而不是为了另一种更改密码的方法。这些方法do工作在,只是如果脚本是由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!
发布于 2018-10-23 07:17:42
根据:https://stackoverflow.com/questions/714915/using-the-passwd-command-from-within-a-shell-script
echo "$npasswd" | passwd --stdin user
或
echo "user:$npasswd" | chpasswd
对你有好处。
https://unix.stackexchange.com/questions/477184
复制相似问题