245 votes

Comment ajouter automatiquement un compte utilisateur ET un mot de passe avec un script Bash ?

J'ai besoin d'avoir la possibilité de créer des comptes utilisateurs sur mon Linux (Fedora 10) et d'attribuer automatiquement un mot de passe via un bash script(ou autre, si besoin).

Il est facile de créer l'utilisateur via Bash, par exemple :

[whoever@server ]#  /usr/sbin/useradd newuser

Est-il possible d'attribuer un mot de passe dans Bash, quelque chose de fonctionnellement similaire à ceci, mais automatiquement :

[whoever@server ]# passwd newuser
Changing password for user testpass.
New UNIX password:
Retype new UNIX password: 
passwd: all authentication tokens updated successfully.
[whoever@server ]#

14 votes

Pourquoi est-ce hors sujet ?

24 votes

Je pense que cette question est dans le sujet. L'une des tendances les plus fortes actuellement est l'attitude DevOps de "configuration as code", c'est-à-dire que la plateforme est créée en "programmant" une séquence d'étapes d'administration qui amorcent la plateforme. Faire la gestion des utilisateurs en mode script fait définitivement partie de cette programmation.

2 votes

En tant que DevOps, je pense que c'est une question utile (avec des réponses utiles), mais c'est avec ma casquette de SysAdmin. Il serait peut-être plus judicieux de déplacer cette question vers SuperUser.

249voto

SilverDaemon Points 431

Vous pouvez également utiliser chpasswd :

echo username:new_password | chpasswd

donc, vous changez le mot de passe de l'utilisateur username a new_password .

6 votes

+1, C'est le bon outil pour le travail : $ apropos chpasswd ... chpasswd (8) - update passwords in batch mode

0 votes

Cela fonctionne également avec busybox alors que passwd ne le fait pas (il n'y a pas de --stdin option).

140voto

Tralemonkey Points 284

Vous pouvez exécuter la commande passwd et lui envoyer une entrée en pipeline. Donc, faites quelque chose comme :

echo thePassword | passwd theUsername --stdin

3 votes

L'avantage de cette méthode est qu'elle est sécurisée (supposée echo est un buildin dans le shell utilisé, ce qui est généralement le cas), du moins en ce qui concerne /proc/ .

9 votes

Je devais faire echo -e "password\npassword\n" | passwd le 13.04

35 votes

--stdin a été déprécié dans les systèmes Linux plus récents. Veuillez utiliser chpasswd à la place.

129voto

Damien Points 567

Je me posais la même question, et je ne voulais pas m'appuyer sur un script Python.

C'est la ligne pour ajouter un utilisateur avec un mot de passe défini en une seule ligne bash :

useradd -p $(openssl passwd -crypt $PASS) $USER

33 votes

useradd -p $(openssl passwd -1 $PASS) $USER est plus moderne, car les back-ticks sont dépréciés et les $() est recommandé.

0 votes

Un problème que j'ai eu avec ça : J'avais créé mon utilisateur avec un shell de zsh, sans me rendre compte qu'à ce moment-là, zsh n'avait pas été installé. La connexion par mot de passe échouera si vous faites cela, donc avant de supposer que cela ne fonctionne pas (cela fonctionnera certainement sur l'Arch d'aujourd'hui et sur Debian 7) vous pourriez vérifier cela sur une toute nouvelle installation.

5 votes

useradd -m -p <password> -s /bin/bash <user> -m : répertoire personnel de l'utilisateur, -s : shell défuelt de l'utilisateur, substitut. password y user pour vos besoins.

79voto

Ying Points 541

Le code ci-dessous a fonctionné dans Ubuntu 14.04. Essayez avant de l'utiliser dans d'autres versions/ variantes de Linux.

# quietly add a user without password
adduser --quiet --disabled-password --shell /bin/bash --home /home/newuser --gecos "User" newuser

# set password
echo "newuser:newpassword" | chpasswd

3 votes

Je ne comprends pas. --gecos

14 votes

fr.wikipedia.org/wiki/Gecos_field Le champ gecos, ou champ GECOS, est une entrée du fichier /etc/passwd sur Unix et les systèmes d'exploitation similaires. Il est généralement utilisé pour enregistrer des informations générales sur le compte ou ses utilisateurs, telles que leur nom réel et leur numéro de téléphone. GECOS signifie General Electric Comprehensive Operating System, qui a été renommé GCOS lorsque la division des grands systèmes de GE a été vendue à Honeywell.

0 votes

C'était la bonne réponse pour moi sur Debian 8, cela a fonctionné comme un charme sur ma configuration de serveur bash script !

37voto

Paul S Points 433

J'ai aimé l'approche de Tralemonkey qui est de echo thePassword | passwd theUsername --stdin bien que ça n'ait pas fonctionné pour moi comme c'était écrit. Ceci cependant a fonctionné pour moi.

echo -e "$password\n$password\n" | sudo passwd $user

-e est de reconnaître \n comme nouvelle ligne.

sudo est l'accès à la racine pour Ubuntu.

Les guillemets sont destinés à reconnaître $ et développer les variables.

La commande ci-dessus passe le mot de passe et une nouvelle ligne, deux fois, à passwd qui est ce que passwd exige.

Si vous n'utilisez pas de variables, je pense que cela fonctionne probablement.

echo -e 'password\npassword\n' | sudo passwd username

Les guillemets simples devraient suffire ici.

3 votes

Fonctionne parfaitement dans bash. Cependant, si elle est exécutée en sh, l'option -e ne fonctionne pas. J'ai découvert à la dure qu'elle produit en fait "-e". Heureusement, l'option -e n'est pas nécessaire dans sh, l'échappement y est par défaut. La version portable consiste à utiliser printf "password \npassword\n " | ... à la place.

0 votes

Réponse parfaite pour ubuntu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X