스크립트에서 사용자 비밀번호 변경이 작동하지 않습니다.

스크립트에서 사용자 비밀번호 변경이 작동하지 않습니다.

어떤 이유로 X분마다 사용자의 비밀번호를 임의의 비밀번호로 변경하는 스크립트를 사용하고 싶습니다. 이것은 데비안 머신이고 다음 스크립트는 루트의 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

그것은 당신에게 좋습니다.

관련 정보