TP SSH - Bantko

TP SSH - Bantko
PRÉSENTATION

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

Architecture du TP

À l'issue de ce TP, vous serez capable de :

  1. Sécuriser l'accès distant à des serveurs Linux en environnement
    professionnel
  2. Automatiser le déploiement de configurations SSH pour plusieurs
    utilisateurs
  3. Mettre en place une infrastructure réseau isolée et fonctionnelle
  4. Appliquer les bonnes pratiques de sécurité (clés SSH, permissions,
    logs)
  5. Documenter une infrastructure pour faciliter la maintenance
OBJECTIFS

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

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