何らかの理由で、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
3つの方法をそれぞれ試しましたが(もう2つの方法は注釈付きです)、何も機能しません。しかし、コピーするときみんなスクリプトを端末に貼り付けて実行すると正常に動作します。 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
それはあなたに良いです。