Alterar a senha de um usuário dentro de um script não funciona [duplicado]

0

Por razões, quero alterar a senha de um usuário para uma aleatória a cada X minutos usando um script. É uma máquina debian, o seguinte script é iniciado via @reboot no crontab do root e o script está sendo executado. A cada X minutos, a nova senha é gravada no arquivo especificado no script, no entanto, a senha nunca é alterada.

#!/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

Eu tentei cada um dos três métodos (os outros dois estão sendo comentados agora), nenhum trabalho. No entanto, quando copio o script inteiro e apenas o colo em um terminal para executá-lo, ele funciona perfeitamente bem. Ele simplesmente não funciona em um script se for iniciado pelo cron.

Alguém sabe o que está acontecendo aqui?
Eu também tentei echo -n pelo caminho, os mesmos resultados. Eu também tentei definir $npasswd no script para algo fixo, apenas para testá-lo, os mesmos resultados.

Só para esclarecer: estou realmente procurando uma resposta que explique por que isso está funcionando manualmente, mas não em um script, não para uma maneira alternativa de alterar a senha. Esses métodos funcionam , mas não apenas se o script for iniciado pelo cron.

Saída do script com set -o errexit -o nounset -o xtrace no topo:

+ :
++ pwgen 8 1
+ npasswd=eiZeed5u
+ echo eiZeed5u
++ openssl passwd -1 eiZeed5u
+ usermod --password '$1$EYRCYJXm$5XkrVNxdrYRzxBmcRwuXm0' user
+ sleep 300

Saída dos itens acima quando iniciada por meio do 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

O que torna o problema claro para mim agora, obrigado @ l0b0 !

    
por confetti 23.10.2018 / 08:59

1 resposta

1

De acordo com: link

echo "$npasswd" | passwd --stdin user

ou

echo "user:$npasswd" | chpasswd

será bom para você.

    
por 23.10.2018 / 09:17