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.

Jake Petroules
la source

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.

Césium
la source
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.

Allan
la source
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:::
Joon Byun
la source
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 .

waltinator
la source
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.

osexp2003
la source