Parfois, nous pourrions vouloir automatiser le processus de création de l’utilisateur sans avoir à interagir avec la ligne de commande.

Dans ce tutoriel, nous allons écrire un script shell robuste pour automatiser le processus de création de l’utilisateur. Nous utiliserons les outils intégrés qui sont livrés avec la plupart des distributions Linux, en construisant notre script au fur et à mesure que nous progressons dans les sections du tutoriel. En fin de compte, nous aurons un script shell robuste que nous pourrons exécuter manuellement ou à partir d’un autre programme.

Configuration du script d’automatisation

Nous commencerons par effectuer des vérifications de validation telles que vérifier si l’utilisateur existe déjà et attribuer un mot de passe par défaut si aucun n’a été fourni. Ensuite, nous passerons en revue quelques variations sur la création réelle de l’utilisateur et l’attribution du mot de passe.
2.1. Utilisation de Base

Nous exécuterons le script à partir de la ligne de commande et lui fournirons les arguments –username et –password. En cas d’erreur de validation, le message d’utilisation du script contenant les instructions nous sera présenté. Une fois le script exécuté avec succès, nous imprimerons le nom d’utilisateur et le mot de passe.

Commençons par créer le fichier de script et écrire la fonction d’utilisation:
freestar

!/ bin / sh

utilisation() {
printf « create-user[-u/usernameusername]\n »
printf « OPTIONS\n »
printf »-uusernamenom d’utilisateur \nom du nouveau compte (obligatoire)\n »
printf » -ppasswordmot de passe \tpassword pour le nouveau compte (facultatif) \n »
printf »-hhelphelp \tim imprimer cette aide \n »
sortie 1
}

Nous appellerons la fonction d’utilisation en cas d’erreur. C’est une convention UNIX et Linux d’avoir la fonction d’utilisation incluse dans nos scripts.

Options de Commande de Processus

Maintenant, nous devons traiter les options de commande. Nous allons simplement parcourir les arguments en utilisant une boucle while et attribuer les valeurs aux variables. Ensuite, nous effectuerons des vérifications de santé mentale, et si un mot de passe n’est pas fourni en argument, nous en attribuerons un par défaut.

Traitons les arguments après la fonction d’utilisation:

alors que [« $# » – gt 0]; faire
cas « 1$ » dans
– u|usernameusername) username =  » shift2″ shift ;;
-p|passwordpassword) password=  » shift2″ shift ;;
– h/helpaide) utilisation ;;
*) utilisation ;;
esac
changement
faire

[-z « usernamenom d’utilisateur »] & & utilisation
[-z »passwordpassword »] &&password =$(uuidgen/cut-d’-‘-f1)

Si aucun nom d’utilisateur n’a été fourni, nous imprimons l’utilisation du script et quittons le programme avec le code de sortie 1. Dans le cas d’un mot de passe manquant, nous avons utilisé la commande uuidgen qui génère un UUID. Dans notre cas, nous n’avons besoin que des huit premiers caractères de l’UUID généré pour le mot de passe par défaut.

Vérifiez Si L’Utilisateur Existe

Parfois, il est possible que nous ayons un utilisateur existant avec le même nom d’utilisateur que l’argument nom d’utilisateur. Par conséquent, nous aurions besoin de vérifier l’utilisateur existant dans la base de données des utilisateurs au préalable. Nous pouvons utiliser la commande userdbctl. Nous utilisons la commande userdbctl pour interroger la base de données utilisateur sur une machine Linux.
freestar

La commande userdbctl renvoie le code de sortie 1 pour les utilisateurs qui n’existent pas dans la base de données utilisateur. Sinon, il retournera 0:

userdbctl utilisateur « usernameusername »>/dev/null 2 > & 1
[ « $? »-eq 0] &&echo »usernamele nom d’utilisateur existe déjà » && sortie 2

Dans l’extrait ci-dessus, nous exécutons la commande userdbctl et vérifions le code de sortie qu’elle renvoie. Le $? operator contient le code de sortie de la dernière commande que nous exécutons dans le script. Dans ce cas, il contiendra un 0 ou un 1.

Bien sûr, nous pouvons laisser cette vérification de sécurité, car la commande useradd échouera si l’utilisateur existe déjà. Cependant, nous avons besoin d’une sorte de rétroaction simple qui va bien avec notre script car useradd renverra le code de sortie 9 pour un nom d’utilisateur qui existe déjà.

Création d’un Utilisateur et Attribution d’un Mot de passe

Maintenant que les pré-vérifications sont terminées, nous allons passer à la création de l’utilisateur réel. Nous utiliserons la commande useradd pour la création de l’utilisateur. Pour l’attribution du mot de passe, nous montrerons quelques variantes.

userajouter avec l’option -p

La commande useradd crée un utilisateur avec le nom d’utilisateur fourni. Nous pouvons également créer l’utilisateur avec un mot de passe en fournissant l’option -p ou –password à la commande useradd:
freestar

word userajouter-m nouveauutilisateur-p mot de passe fort
us userdbctl utilisateur nouvel utilisateur
Nom d’utilisateur: newuser
Disposition: régulier
Connexion OK: oui
Mot de passe OK: oui
UID: 1004
GID: 1004 (nouvel utilisateur)
Répertoire: /accueil / newuser
Rangement : classique
Coque : / bin / bash
Mots de passe : aucun

L’indicateur -m crée un répertoire personnel pour l’utilisateur. Utilisons la commande ci-dessus dans notre script et fournissons-lui les variables nom d’utilisateur et mot de passe:

useradd-m »usernameusername » -p »passwordpassword »>/dev/null 2 > & 1

commandes useradd, echo et passwd

La commande passwd crée ou modifie le mot de passe d’un compte utilisateur existant. Il prend un nom d’utilisateur comme argument et présente une invite interactive pour la modification du mot de passe.

Changeons le mot de passe du nouvel utilisateur que nous venons de créer:

pass passwd nouvel utilisateur
Changer le mot de passe pour un nouvel utilisateur.
Mot de passe actuel:
Nouveau mot de passe:
Retaper un nouveau mot de passe:
passwd : mot de passe mis à jour avec succès

Comme nous pouvons le voir, la commande passwd nous présente une invite interactive. Pour cette raison, nous utiliserons la commande echo à côté de passwd pour ignorer l’invite interactive.

La commande echo est un utilitaire qui prend l’entrée de l’entrée standard et l’imprime sur la sortie standard. Nous pouvons également canaliser echo avec d’autres commandes pour contourner les invites et les messages de confirmation. Par conséquent, nous pouvons facilement automatiser les tâches qui impliquent des invites dans un script shell ou dans le terminal Linux.

Voyons ça en action:

echoecho-fr « mot de passe fort\nnewpass\nnewpass\n| / passwd newuser
Changer le mot de passe pour un nouvel utilisateur.
Mot de passe actuel:
Nouveau mot de passe:
Retaper un nouveau mot de passe:
passwd : mot de passe mis à jour avec succès

Voici ce qui s’est passé:

Nous avons activé la prise en charge des caractères de séquence d'échappement pour la commande echo via l'indicateur -e
L'indicateur -n désactive l'impression de la nouvelle ligne de fin
Nous faisons écho au mot de passe actuel suivi du nouveau mot de passe confirmé
Chaque mot de passe est séparé par le caractère “\n", ils sont donc traités comme trois entrées standard distinctes
La sortie de la commande echo est acheminée vers la commande passwd, que nous avons utilisée pour changer le mot de passe de newuser

Maintenant que nous avons une idée de la façon de contourner les invites à l’aide d’echo, nous pouvons l’implémenter dans notre script au lieu de fournir le mot de passe à la commande useradd:
freestar

useradd-m « usernameusername »>/dev/null 2 > & 1
echo-n »passwordmot de passe\npassword mot de passe\n »/ passwd »usernamenom d’utilisateur »/dev/null 2> & 1

commandes useradd, echo et chpasswd

Alternativement, nous pouvons utiliser la commande chpasswd pour changer le mot de passe des nouveaux utilisateurs. Il remplit la même fonction que passwd.

Voyons ça en action:

ch chpasswd
nouveauutilisateur: secretpasscode

Comme passwd, chpasswd nous présentera une invite interactive multi-lignes. Nous écrivons le nom d’utilisateur suivi d’un deux-points (:) et du nouveau mot de passe. Ensuite, nous pouvons appuyer sur CTRL + D pour appliquer les modifications. Comme passwd, nous pouvons également utiliser la commande echo pour automatiser ce processus:

echo echo « nouvel utilisateur: code7654| / chpasswd

Maintenant que nous sommes familiers avec chpasswd, nous pouvons l’utiliser à la place de passwd dans notre script:

useradd-m « usernamenom d’utilisateur »
echo « {{nom d’utilisateur}:{{mot de passe}| / chpasswd

Touche Finale

Notre script est presque terminé. Maintenant, nous devons écrire le code de rétroaction qui permet à un utilisateur de savoir que l’utilisateur a été créé avec succès.

Nous vérifierons le code de sortie de la dernière commande exécutée dans le script, qui peut être useradd, passwd ou chpasswd, selon la variante utilisée:

si [« $? » – eq 0]; puis
echo « Nom d’utilisateur :usernamenom d’utilisateur »
echo « Mot de passe:passwordmot de passe »
autre
echo « Échec de la configuration du compte utilisateur »
userdel-f « usernamenom d’utilisateur »
fi

Décomposons-le:

Nous vérifions le code de sortie de la commande précédemment exécutée et nous nous attendons à ce qu'il soit égal à 0
Si c'est 0, ce qui indique généralement le succès, nous imprimons le nom d'utilisateur et le mot de passe
En cas d'échec, nous imprimons le message d'échec et supprimons l'utilisateur de la base de données utilisateur à l'aide de la commande userdel si elle a été créée
L'indicateur -f force userdel à supprimer l'utilisateur - même s'il est toujours connecté - avec son répertoire personnel et son spool de messagerie

Nous sommes maintenant prêts à tester le script:
freestar

$ ./ créer-utilisateur-u « johndoe »-p « ys2b7444 »
Nom d’utilisateur : johndoe
Mot de passe: ys2b7444
$ ./ créer-utilisateur-u « doejohn »
Nom d’utilisateur : doejohn
Mot de passe: 89c871de
$ ./ créer-utilisateur – u johndoe
johndoe existe déjà
$ ./ créer – utilisateur
create-user [-u/usernameusername]
OPTION

  • uusernamenom d’utilisateur nom d’utilisateur du nouveau compte (obligatoire)
  • ppasswordmot de passe mot de passe pour le nouveau compte (facultatif)
  • hhelp aidez à imprimer cette aide

Notre script create-user est maintenant terminé:

!/ bin / sh

utilisation() {
printf « create-user [-u/usernameusername] <username>\n »
printf « OPTIONS\n »
printf »-uusernamenom d’utilisateur \nom du nouveau compte (obligatoire)\n »
printf » -ppasswordmot de passe \tpassword pour le nouveau compte (facultatif) \n »
printf »-hhelphelp \tim imprimer cette aide \n »
sortie 1
}

alors que [« $# » – gt 0]; faire
cas « 1$ » dans
– u|usernameusername) username =  » shift2″ shift ;;
-p|passwordpassword) password=  » shift2″ shift ;;
– h/helpaide) utilisation ;;
*) utilisation ;;
esac
changement
faire

[-z « usernamenom d’utilisateur »] & & utilisation
[-z »passwordpassword »] &&password =$(uuidgen/cut-d’-‘-f1)

useradd-m »usernameusername » -p »passwordpassword »>/dev/null 2 > & 1

————

VARIATION

————

useradd-m « usernamenom d’utilisateur »

echo-n »passwordmot de passe\npassword mot de passe\n » / passwdusernamenom d’utilisateur »

echo « {{nom d’utilisateur}:{{mot de passe}| / chpasswd

si [« $? » – eq 0]; puis
echo « Nom d’utilisateur :usernamenom d’utilisateur »
echo « Mot de passe:passwordmot de passe »
autre
echo « Échec de la configuration du compte utilisateur »
userdel-f « usernamenom d’utilisateur »
fi