TP SSH - Bantko

Contexte et Situation
Bantko est une fintech en pleine expansion qui développe des solutions de paiement innovantes. L'entreprise compte aujourd'hui 15 développeurs répartis en équipes et plusieurs managers techniques.
Le siège social se situe en région parisienne, à Cachan et un nouveau site a ouvert début 2025.
Suite à un audit de sécurité, la direction IT de Bantko vous mandate pour mettre en place une infrastructure SSH sécurisée permettant :
- Des connexions sans mot de passe entre postes clients et serveurs
- Une gestion centralisée des accès via clés SSH
- Une automatisation de la configuration pour faciliter l'onboarding
- Une traçabilité complète des connexions
Architecture du TP
À l'issue de ce TP, vous serez capable de :
- Sécuriser l'accès distant à des serveurs Linux en environnement
professionnel - Automatiser le déploiement de configurations SSH pour plusieurs
utilisateurs - Mettre en place une infrastructure réseau isolée et fonctionnelle
- Appliquer les bonnes pratiques de sécurité (clés SSH, permissions,
logs) - Documenter une infrastructure pour faciliter la maintenance
Objectifs Pédagogiques
Configurer un réseau local entre 2 machines virtuelles
- Installer et sécuriser OpenSSH (client et serveur)
- Générer et distribuer des clés SSH Ed25519
- Créer des scripts Bash d'automatisation (niveau débutant)
- Manipuler les fichiers de configuration SSH
- Gérer les permissions Linux (chmod, chown)
- Utiliser l'agent SSH pour les clés avec passphrase
- Tester et valider une infrastructure
- Analyser les logs système
Workflow
Le TP est organisé en 5 GROUPES DE QUESTIONS correspondant aux
étapes logiques de mise en place de l'infrastructure SSH.
Chaque groupe doit être validé avant de passer au suivant.
DÉROULEMENT
GROUPE 1 : Préparation de l'Infrastructure
GROUPE 2 : Configuration SSH et Sécurisation
GROUPE 3 : Gestion des Clés SSH
GROUPE 4 : Automatisation et Scripting
GROUPE 5 : Documentation et Validation
Page HTML automatique
GROUPE 1 : PRÉPARATION DE L'INFRASTRUCTURE
Objectif : Créer et configurer les 2 VMs avec réseau fonctionnel
Q1.1 - Configuration réseau (1 point)
Tâches à réaliser :
Créer la VM client-ws avec IP 192.168.100.10
Créer la VM dev-server avec IP 192.168.100.20
Configurer /etc/hosts sur les deux machines
Tester la connectivité (ping bidirectionnel)
Commandes de validation :
Sur client-ws
ip addr show | grep 192.168.100.10
ping -c 2 dev-server
Sur dev-server
ip addr show | grep 192.168.100.20
ping -c 2 client-ws
Q1.2 - Création des utilisateurs
Tâches à réaliser :
Créer les groupes developers et managers sur les deux VMs
Créer dev1, dev2 sur client-ws
Créer dev1, dev2, dev3 sur dev-server
Créer votre compte manager (format: 1ère lettre prénom + nom)
Exemple : vhugo pour Victor Hugo
Définir les mots de passe : Bantko2025!
Commandes de validation :
Vérifier les groupes
getent group developers
getent group managers
Vérifier les utilisateurs
tail -4 /etc/passwd
Tester connexion
su - dev1
Q1.3 - Installation OpenSSH
Tâches à réaliser :
Installer openssh-client sur client-ws
Installer openssh-server sur dev-server
Démarrer et activer le service SSH sur dev-server
Vérifier le port 22 en écoute
Commandes de validation :
Sur client-ws
which ssh
ssh -V
Sur dev-server
systemctl status ssh
sudo ss -tlnp | grep :22
Q1.4 - Test de connexion initiale
Tâches à réaliser :
Se connecter depuis client-ws vers dev-server avec mot de passe
Tester avec dev1@dev-server
Commandes de validation :
Sur client-ws
ssh dev1@dev-server
Saisir le mot de passe : Bantko2025!
GROUPE 2 : CONFIGURATION SSH ET SÉCURISATION
Objectif : Sécuriser le serveur SSH selon les bonnes pratiques
Q2.1 - Configuration sshd_config
Tâches à réaliser :
Sauvegarder /etc/ssh/sshd_config
Modifier la configuration :
- Port 22
- PermitRootLogin no
- PubkeyAuthentication yes
- PasswordAuthentication yes (pour l'instant)
- AllowUsers dev1 dev2 dev3
- LogLevel VERBOSE
- MaxAuthTries 3
Commandes de validation :
sudo sshd -t
sudo grep "^PermitRootLogin" /etc/ssh/sshd_config
sudo grep "^AllowUsers" /etc/ssh/sshd_config
Q2.2 - Bannière d'avertissement
Tâches à réaliser :
Créer /etc/ssh/banner.txt
Contenu : Message d'avertissement Bantko
Configurer Banner /etc/ssh/banner.txt dans sshd_config
Redémarrer SSH
Commandes de validation :
cat /etc/ssh/banner.txt
ssh dev1@dev-server
La bannière doit s'afficher
Q2.3 - Vérification des logs
Tâches à réaliser :
Se connecter avec dev1 depuis client-ws
Vérifier l'entrée dans journalctl
Commandes de validation :
Voir les 20 dernières lignes des logs SSH
sudo journalctl -u ssh -n 20
Voir les connexions acceptées
sudo journalctl -u ssh | grep "Accepted publickey"
Voir les logs depuis 10 minutes
sudo journalctl -u ssh --since "10 minutes ago"
Format détaillé avec toutes les informations
sudo journalctl -u ssh -o verbose | grep Accepted
GROUPE 3 : GESTION DES CLÉS SSH
Objectif : Générer et distribuer les clés SSH pour connexion sans mot de passe
Q3.1 - Génération des clés SSH
Tâches à réaliser :
Générer clés Ed25519 pour dev1, dev2 (sans passphrase)
Générer clé Ed25519 pour manager (AVEC passphrase: Bantko2025!Secure)
Fichiers : ~/.ssh/id_ed25519_bantko
Vérifier les permissions (600 pour clés privées, 700 pour .ssh)
Commandes de validation :
ls -la ~/.ssh/
cat ~/.ssh/id_ed25519_bantko.pub
Q3.2 - Distribution des clés
Tâches à réaliser :
Copier clé publique dev1 vers dev-server avec ssh-copy-id
Copier clé publique dev2 vers dev-server
Copier clé publique manager vers dev-server
Vérifier authorized_keys sur dev-server (permissions 600)
Commandes de validation :
Sur client-ws
ssh-copy-id -i ~/.ssh/id_ed25519_bantko.pub dev1@dev-server
Sur dev-server
cat ~/.ssh/authorized_keys
ls -la ~/.ssh/authorized_keys
Q3.3 - Test connexion sans mot de passe │
Tâches à réaliser :
Se connecter en tant que dev1 SANS mot de passe
Se connecter en tant que dev2 SANS mot de passe
Se connecter en tant que manager (passphrase demandée)
Commandes de validation :
ssh -i ~/.ssh/id_ed25519_bantko dev1@dev-server
GROUPE 4 : AUTOMATISATION ET SCRIPTING
Objectif : Créer des scripts d'automatisation pour simplifier la gestion
Q4.1 - Script de création utilisateur
Tâches à réaliser :
Créer un script : setup_user_bantko.sh
Fonctionnalités requises :
- Créer un utilisateur (argument 1)
- Générer sa clé SSH Ed25519
- Copier la clé vers dev-server (argument 2: IP)
- Logger toutes les opérations dans /var/log/bantko_ssh_setup.log
Structure attendue :
#!/bin/bash
# Vérification root
# Vérification arguments
# Création utilisateur
# Génération clé SSH
# Copie clé vers serveur
# Logging
Q4.2 - Script de génération ~/.ssh/config
Tâches à réaliser :
Créer un script : generate_ssh_config.sh
Fonctionnalités requises :
- Générer automatiquement ~/.ssh/config pour l'utilisateur
- Créer un alias "dev" pointant vers dev-server
- Définir les paramètres : User, HostName, IdentityFile, Port
- Définir les permissions 600
Exemple de contenu généré :
Host dev
HostName dev-server
User dev1
Port 22
IdentityFile ~/.ssh/id_ed25519_bantko
ServerAliveInterval 60
Q4.3 - Configuration Agent SSH pour manager
Tâches à réaliser :
Ajouter code dans ~/.bashrc du manager pour :
- Démarrer ssh-agent automatiquement
- Ajouter la clé à l'agent au démarrage
Tester : connexions successives SANS retaper la passphrase
Code attendu dans ~/.bashrc :
if [ -z "$SSH_AUTH_SOCK" ]; then
eval "$(ssh-agent -s)" > /dev/null
ssh-add ~/.ssh/id_ed25519_bantko 2>/dev/null
fi
GROUPE 5 : DOCUMENTATION ET VALIDATION
Objectif : Documenter l'infrastructure et valider le fonctionnement
Q5.1 - Documentation technique
Tâches à réaliser :
Créer un fichier : DOCUMENTATION_BANTKO.txt
Contenu minimum :
- Architecture (IPs, noms machines)
- Liste utilisateurs créés
- Emplacement des clés SSH
- Commandes de connexion
- Procédure d'ajout d'un nouvel utilisateur
Q5.2 - Tests de validation finale
Tâches à réaliser :
Tester connexion SSH simplifiée : ssh dev
Vérifier PasswordAuthentication no sur dev-server
Tester qu'un utilisateur sans clé ne peut PAS se connecter
Vérifier les logs dans journald
Commandes de validation :
Test connexion simplifiée
ssh dev
Vérifier PasswordAuthentication
sudo grep "^PasswordAuthentication" /etc/ssh/sshd_config
Tester refus utilisateur sans clé
(créer un utilisateur test sans clé SSH)
ssh testuser@dev-server
Doit afficher : Permission denied (publickey)
Vérifier les logs
sudo journalctl -u ssh --since "5 minutes ago" | grep Accepted
sudo journalctl -t bantko-ssh
Q5.3 : Générer automatiquement une page HTML récapitulative
Page HTML de rapport
Tâches à réaliser :
Modifier votre script setup_user_bantko.sh pour qu'il génère automatiquement une page HTML :
~/rapport_ssh_bantko.html
Contenu minimum :
- Titre "Rapport SSH - Bantko"
- Tableau récapitulatif des utilisateurs créés
- Statut pour chaque étape (OK ou NOK)
- Logs horodatés des opérations
- Style CSS basique pour lisibilité
Éléments attendus dans le HTML :
- Balises HTML5 correctes (<!DOCTYPE>, , )
- Tableau avec colonnes : Utilisateur | Compte | Clé SSH | Config
- CSS inline ou