Comment définir des mots de passe utilisateur à l'aide de passwd sans invite?


21

J'écris un script pour ajouter une grande quantité d'utilisateurs à un système. Cela implique en partie de définir des mots de passe par défaut pour chaque utilisateur. Comment puis-je définir les mots de passe des utilisateurs sans qu'il me demande le mot de passe à l'avance?

Malheureusement, passwd ne semble pas accepter d'argument indiquant le nouveau mot de passe à définir. J'utilise Ubuntu 11.10.

Réponses:


22

Essayez usermod:

usermod --password PASSWORD USERNAME

La seule chose est que cela nécessite une chaîne de mot de passe pré-cryptée que vous devez d'abord générer.


1
... que je peux générer en utilisant mkpasswd. Excellent, merci!
Jake Petroules

16
Vous pouvez également utiliser openssl pour générer le mot de passe crypté. Par exemple:usermod --password $(echo my_new_password | openssl passwd -1 -stdin) USERNAME
Eric Smith

1
Trois ans trop tard. Je n'ai pas pu répondre @EricSmith, mais j'ai découvert une version plus simple de la commande qui fonctionnait:usermod --password $(openssl passwd -1 {password}) {username}
BoCoKeith

13

Vous devriez regarder la chpasswdcommande (si elle est disponible dans votre version linux):

echo 'userid:newpasswd' | chpasswd

Ou, vous pouvez ajouter un fichier répertoriant l'ID utilisateur: passwd pour chaque compte sur une ligne distincte.

C'est ça.


cela a fonctionné pour moi dansDockerfile
Vishrant

1

Inspiré par l'idée d'Eric Smith, la combinaison openssl passwdet la usermod -pcommande ont fonctionné. Générez la valeur hachée du mot de passe avec la valeur salt.

$ openssl passwd -1  -salt 5RPVAd clear-text-passwd43
$1$5RPVAd$vgsoSANybLDepv2ETcUH7.

Ensuite, copiez la chaîne chiffrée dans usermod. Assurez-vous de l'envelopper avec un guillemet simple.

$ usermod -p '$1$5RPVAd$vgsoSANybLDepv2ETcUH7.' root

Vérifiez-le dans le fichier shadow.

$ grep root /etc/shadow
root:$1$5RPVAd$vgsoSANybLDepv2ETcUH7.:17774:0:99999:7:::

0

Vous devez utiliser le vieillissement des mots de passe et définir les utilisateurs de sorte qu'ils doivent changer leur mot de passe lors de la première connexion. Consultez cet article .


Il s'agissait de comptes FTP uniquement, mais de bons conseils. ;)
Jake Petroules

0
(echo user; echo password) | passwd

fonctionne pour moi à la fois dans l'hôte physique et le conteneur, pour différents systèmes d'exploitation (ubuntu xenial, bionic, debian9,10, centos75,76, coreos)

echo user:password | chpasswd

fonctionne pour certains systèmes d'exploitation, mais certains systèmes d'exploitation tels que debian9,10 afficheront une erreur can not connect to /var/run/nscd/socketcar ils utilisent /etc/nsswitch.conf pour déterminer où ils stockent le mot de passe.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.