- Présentation et objectifs
- Choix techniques
- Membres du groupe
- Réalisation des tâches
- Difficultés solutions et améliorations
Le but de ce projet est de produire un script Bash ou Powershell, qui permette de se connecter sur un ordinateur distant et d’effectuer un ensemble de tâches via un menu accessible sur le shell.
- Créer un script qui s’exécute sur une machine et effectue des tâches sur des machines distantes :
- Depuis Windows Server vers Windows
- Depuis Debian vers Ubuntu
- Rédiger la documentation de configuration des environnements et de l’exécution du script
- Présenter le projet
- Depuis un serveur Debian, cibler une machine Windows ou depuis Windows Server 2022, cibler une machine Ubuntu
- Nom : CLIWIN01
- Compte utilisateur : wilder (dans le groupe des admins locaux)
- Mot de passe : Azerty1*
- Adresse IP fixe : 172.16.10.20/24
- Nom : CLILIN01
- Compte utilisateur : wilder (dans le groupe sudo)
- Mot de passe : Azerty1*
- Adresse IP fixe : 172.16.10.30/24
- Nom : SRVWIN01
- Compte : Administrator (dans le groupe des admins locaux)
- Mot de passe : Azerty1*
- Adresse IP fixe : 172.16.10.5/24
- Nom : SRVLX01
- Compte : root
- Mot de passe : Azerty1*
- Adresse IP fixe : 172.16.10.10/24
Rôles du groupe | SPRINT 1 | SPRINT 2 | SPRINT 3 | SPRINT 4 |
---|---|---|---|---|
Scrum Master | Saddem | Karim | Philippe | Angel |
Product Owner | Angel | Saddem | Karim | Philippe |
Technicien 1 | Philippe | Angel | Saddem | Karim |
Technicien 2 | Karim | Philippe | Angel | Saddem |
Les scripts Bash et Powershell contiennent chacun 19 actions, toutes exécutées via SSH. Voici les taux de réalisation de chacun d'eux :
Cible |
Tâche |
Bash |
PowerShell |
---|---|---|---|
Utilisateur | Afficher la liste des utilisateurs | ✅ | ✅ |
Utilisateur | Créer un utilisateur | ✅ | ✅ |
Utilisateur | Modifier le mot de passe d'un utilisateur | ✅ | ✅ |
Utilisateur | Supprimer un utilisateur | ✅ | ✅ |
Ordinateur | Lister les services actifs | ✅ | ✅ |
Ordinateur | Démarrer un service | ✅ | ✅ |
Ordinateur | Arrêter un service | ✅ | ✅ |
Ordinateur | Afficher les partitions des disques | ✅ | ✅ |
Ordinateur | Version du système | ✅ | ✅ |
Ordinateur | Rechercher et appliquer les mises à jour | ✅ | ❌ |
Ordinateur | Lister les mises à jour | ✅ | ✅ |
Ordinateur | Mettre à jour le système | ✅ | ❌ |
Ordinateur | Arrêter un ordinateur | ✅ | ✅ |
Ordinateur | Redémarrer un ordinateur | ✅ | ✅ |
Utilisateur | Informations sur un utilisateur | ✅ | ✅ |
Ordinateur | Informations sur un ordinateur | ✅ | ✅ |
Ordinateur | Consulter les logs | ✅ | ✅ |
Utilisateur | Consulter les infos utilisateur | ✅ | ✅ |
Ordinateur | Consulter les infos de l'ordinateur | ✅ | ✅ |
- Notre première difficulté a été de prendre du recul et de réfléchir aux différentes fonctionnalités que nous souhaitions implémenter dans le script. La première semaine nous avons démarrer le script Bash avec comme objectif de pouvoir se connecter sur la machine distante et de faire quelques actions dessus. Mais à un moment donné nous avons réalisé qu'il était important de réaliser le squelette du script pour bien ordonner nos idées et savoir de quoi seraient composés les différents menu. Cette étape que nous avons réalisé en fin de semaine 1 a véritablement posé les bases de tout ce que nous avons fait ensuite.
- Une autre difficulté a été de se connecter en SSH sans mot de passe, que ce soit avec Bash ou Powershell (essais toujours en cours sur Powershell). Nous avons fait beaucoup de manipulations, principalement de la modification de fichiers, et cela nous a pris de nombreuses heures.
- Difficulté également pour intégrer l'autocomplétion : on a choisi de tester cette fonction sur la fonction collecte_utilisateurs_infos() avec la commande lastlog. Il y a eu plusieurs versions
sur la première version on avait une erreur, il n'affichait rien quel que soit l'utilisateur sélectionné avec un message "lastlog : Utilisateur ou gamme inconnu : utilisateur".
On a modifié le script, après cette modif lorsque le script trouvait 1 seul utilisateur avec la chaine de caractères tapée -> il affichait directement les infos de celui-ci, sans passer par une liste. Ca fonctionnait, mais le souci était que s'il y avait plusieurs utilisateurs et qu'il fallait en choisir un dans la liste, dans ce cas il affichait systémtatiquement "never logged in".
On a mis à jour le script et cette fois c'était OK, par contre pour que les logs soient affichés, il fallait que l'utilisateur se connecte au moins une fois en ssh, sinon on avait l'affichage "Never logged in". Pour résoudre ce problème on a donc ajouté dans le script la connexion automatique en ssh lors de la création d'un utilisateur. - Intégration difficile de Dialog dans Bash Pour améliorer l'expérience utilisateur nous avons choisi d'utiliser Dialog, qui permet un affichage plus convivial et intuitif que celui proposé dans un menu basique. Sauf que nous l'avons implémenter alors que nous avions déjà rédigé la majeure partie de notre script. L'intégration de Dialog s'est avérée difficile, car elle imposait que revoir en profondeur chaque fonction pour s'afficher correctement. Et c'était notamment le cas lorsqu'il fallait afficher des informations renvoyées par le cient, comme par exemple la liste des utilisateur. Si cela avait été à refaire, nous aurions directement débuté notre script Bash avec Dialog, et cela nous a servi de leçon avec Powershell, puisque le module FZF a été adopté et intégré dès les premières lignes du script.
- En règle générale l'écriture du script a été marquée par de très nombreux soucis techniques : Commandes qui ne fonctionne pas car :
- la syntaxe est juste mais un élément manquant empêche la bonne exécution de la commande
- le PC distant n'a pas la configuration requise pour exécuter la commande (manque un module par exemple)
- En règle générale nous avons réussi à trouver une solution pour chaque problème rencontré. Cela s'est fait au prix de nombreuses recherches sur internet et de nombreux tests sur nos VM. Nous nous sommes par exemple documentés pour trouver les commandes à implémenter dans le script, améliorer notre syntaxe, ou encore ajouter des éléments que nous aurions oublié.
- La création d'un fichier temporaire
$tempfile
pour récupérer les infos renvoyées par le PC distant et les afficher correctement dans Dialog a été très utile et nous a servi dans de nombreuses fonctions.
- Finaliser toutes les commandes sur Powershell
- Implémenter de nouvelles commandes pour Bash et Powershell
- Renforcer les tests de variables de chaque fonction pour prendre en compte tous les cas de figure
- Réussir à se connecter sans mot de passe en ssh sur Powershell
- Améliorer la navigation dans le menu avec un fil d'Ariane comme sur un site web
- Se connecter à une machine équipée d'un autre OS (nous n'avons pas eu le temps de le mettre en place)