理由により、スクリプトを使用してユーザーのパスワードを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
3つの方法(他の2つは現在コメントアウトされています)をそれぞれ試しましたが、どれも機能しません。ただし、entireスクリプトをコピーしてターミナルに貼り付けるだけで実行すると、問題なく動作します。 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
@ l0b に感謝します。
によると: https://stackoverflow.com/questions/714915/using-the-passwd-command-from-within-a-Shell-script
echo "$npasswd" | passwd --stdin user
または
echo "user:$npasswd" | chpasswd
あなたのためになるでしょう.