スクリプト内のユーザーパスワードの変更は機能しません。

スクリプト内のユーザーパスワードの変更は機能しません。

何らかの理由で、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

それはあなたに良いです。

関連情報