De acordo com: link
echo "$npasswd" | passwd --stdin user
ou
echo "user:$npasswd" | chpasswd
será bom para você.
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 !
De acordo com: link
echo "$npasswd" | passwd --stdin user
ou
echo "user:$npasswd" | chpasswd
será bom para você.