Script bash / useradd avec mot de passe

Salut,
J’ai un petit réseau virtuel sur GNS3 et il faut que je fasse un script s’exécutant sur une machine du réseau me permettant de créer des utilisateurs et de leur monter un répertoire partager sur un serveur de fichiers.
Pour le montage, c’est bon :wink:
mais je bloque maintenant sur la création des utilisateurs.
Je n’arrive pas à leur mettre un mot de passe en parametre.

au début je l’avais mis en clair avec :

useradd -m -p 'prout' stagiaire

mais je n’arrivais pas à me connecter
du coup je l’ai crypté avec :

python3 -c 'import crypt; print(crypt.crypt("prout"))'

et mis à la place de celui en clair:

useradd -m -p 'encryptedProut' stagiaire

mais ça ce passe toujours pas.
auriez vous une idée ?

j’ai testé avec :

echo thePassword | passwd theUsername --stdin

mais j’ai un message : option non reconnu --stdin

En bash et avec openssl (il y a d’autres moyens) :

password="super mot de passe !"
crypt_password=$(openssl passwd -1 "$password")
useradd -p $crypt_password -m nom_utilisateur

cf. https://www.openssl.org/docs/man1.1.1/man1/passwd.html

Bonjour

Ça fonctionne pourtant très bien sur ma machine :

michel@debT450:~$ su -
Mot de passe : 
root@debT450:~# nouvUser="stagiaire"
root@debT450:~# motDePasse="prout"
root@debT450:~# passChiffre=$(python3 -c "import crypt; print(crypt.crypt('$motDePasse'))")
root@debT450:~# useradd -m -p $passChiffre $nouvUser
root@debT450:~# exit
déconnexion
michel@debT450:~$ su -l stagiaire
Mot de passe : 
$ echo "\nUSER\t: $USER\nSHELL\t: $SHELL\nHOME\t: $HOME\nPWD\t: $PWD\n"                                                               

USER	: stagiaire
SHELL	: /bin/sh
HOME	: /home/stagiaire
PWD	: /home/stagiaire

$ exit
michel@debT450:~$ 

J’ai donné une commande basique pour faire un hash MD5 mais évidemment on peut sécuriser davantage avec SHA512 (par défaut pour les utilisateurs) et éventuellement du salage (non indispensable) :

openssl passwd -6 -salt "salagexx" "mot_de_passe"

On peut aussi faire la me chose avec mkpasswd :

mkpasswd -m sha-512 -S "salagexx" "mot_de_passe"

Effectivement, ça fonctionne aussi,
mais si le salage et le mot de passe utilisés sont les mêmes pour plusieurs comptes utilisateurs,
ça sera très facilement reconnaissable dans le fichier /etc/shadow


Je viens de me rendre compte que même sans spécifier l’utilisation du salage, python3 l’utilise.
J’ai modifié mon précédent message en conséquence.

Donc, le problème rencontré par vlotho viens d’autre chose,
ce n’est sans doute qu’une simple question d’utilisation des caractères apostrophe et double-guillemet dans la ligne de commande python3

désolé de répondre si tard mais j’ai changé de département entre temps.
je viens de tester en mettant :
password=« super mot de passe ! »
crypt_password=$(openssl passwd -6 -salt « prout » « $password »)
useradd -p $crypt_password -m nom_utilisateur

et quand je fais su -l stagiaire il me met une erreur authentification

désolé je pourrais pas vous mettre le code directement, gns3 me saoule encore et je n’arrive plus à sortir de mon réseau.

je comprend pas pourtant j’ai aucun message d’erreur quand j’execute mon script.

Si ce sont exactement ces commandes c’est normal que cela ne fonctionne pas…

non Bruno je n’ai pas mis « nom_utilisateur », j’ai bien mis ma variable stagiaire"$m"
:slight_smile:

Alors cela devrait fonctionner. Sauf si l’utilisateur stagiaire existait au préalable.

getent shadow | grep stagiaire

et vérifier que le second champ correspond bien au retour de la commande :

openssl passwd -6 -salt "chaine_de_salage" "mot_de_passe"

je vous met le lien du script : https://termbin.com/qbhs

Capture d’écran du 2020-07-02 10-37-36

je viens de tester shadow avec getent et dans le mot de passe encrypté il n’y a pas la partie avant le / c’est à dire : de $6$prout à V61Lp
c’est normal ?

bon, je l’ai rajouté manuellement dans le shadow et j’arrive à me connecter avec le stagiaire2.
par contre il faudrait savoir pourquoi est ce qu’il est tronqué

Il doit y a avoir un problème de variables dans ton script.

EDIT : je corrige car je n’arrivais pas à lire le retour sur ta capture d’écran.

Quelle variable ? tout est dans la commande useradd, non ?
surtout que dans la screen cap le retour de la commande affiche bien la commande complète
ça viendrait pas du / qu’il considère comme un caractère d’échappement ?
non je sais pas, c’est un peu flou pour moi. surtout que la fin du mot de passe est bien présente dans le shadow

stagiaire2:/QWWDlVquy0GoyjI7HQbkN9JY4nbiLrXxmBfYLCrl4Y5edbw26TkZJeEjl4mcktCwT8Dmalt.:18445:0:99999:7:::

Non c’est à cause des signes $ dans la variable $crypt_passwd

et tu aurais une solution ? :slight_smile:

Essaie :

ssh root@192.168.10"$r"."$m" useradd -p ${crypt_passwd//$/\\$} -m stagiaire"$m"

Pour « échapper » les signes $ on les remplace dans la variables par $

Génial, tu me sauves ma soutenance :smiley: Merci