Dans ce tutoriel, nous allons installer OpenSSH sur Ubuntu Server, puis le sécuriser en profondeur : suppression de l’accès root, désactivation de l’authentification par mot de passe, mise en place d’une clé ED25519 — l’algorithme de signature le plus robuste à ce jour — et ajout d’une authentification à double facteur (2FA) via Google Authenticator. Résultat : un serveur SSH où seule une clé SSH valide et un code TOTP permettent de se connecter.
🔧 Prérequis
- Un serveur sous Ubuntu Server 22.04 / 24.04 (ici : machine
labnathan) - Accès root ou
sudo - Connexion internet active
- L’application Google Authenticator installée sur ton smartphone
Partie 1 — Mise à jour du système et installation de SSH
Étape 1 : Mettre à jour le système
Avant toute installation, on s’assure que le système est à jour :
sudo apt update -y && sudo apt upgrade -y

Étape 2 : Installer le service SSH
sudo apt install openssh-server -y

Étape 3 : Vérifier que le service fonctionne
sudo systemctl status ssh

Tu dois voir Active: active (running) en vert. Si ce n’est pas le cas, démarre le service avec sudo systemctl start ssh.
Étape 4 : Activer SSH au démarrage
sudo systemctl enable ssh

Étape 5 : Récupérer l’IP du serveur
ip a

Note l’adresse IP de ton serveur. Dans notre cas : 192.168.122.132. Tu en auras besoin pour te connecter depuis le client.
Partie 2 — Génération et déploiement de la clé SSH ED25519
Nous allons retirer l’authentification par mot de passe et la remplacer par une clé SSH ED25519. Cette opération se fait depuis la machine cliente (ton PC), pas depuis le serveur.
💡 Pourquoi ED25519 ? C’est l’algorithme de clé SSH le plus moderne et le plus solide actuellement. Il est plus rapide et plus sûr que RSA 4096, avec des clés bien plus courtes.
Étape 1 : Générer la paire de clés (sur le client)
ssh-keygen -t ed25519 -a 100

L’outil te demande :
- Emplacement : par défaut
~/.ssh/id_ed25519— tu peux laisser ou personnaliser. - Passphrase : saisis un mot de passe solide pour verrouiller la clé privée. C’est une couche de sécurité supplémentaire : même si quelqu’un vole ta clé, il ne peut pas l’utiliser sans la passphrase.
Étape 2 : Copier la clé publique vers le serveur
ssh-copy-id utilisateur@192.168.122.132

Cette commande envoie ta clé publique dans le fichier ~/.ssh/authorized_keys du serveur. C’est ce couple clé privée (client) / clé publique (serveur) qui garantit l’authenticité de la connexion.
Partie 3 — Sécurisation de la configuration SSH
On se connecte au serveur pour modifier sa configuration :
ssh utilisateur@192.168.122.132
Étape 1 : Sauvegarder la configuration actuelle
Avant de modifier quoi que ce soit, on archive le fichier de config original :
sudo mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Étape 2 : Créer un nouveau fichier de configuration
sudo nano /etc/ssh/sshd_config

Colle-y la configuration suivante :
Port 22
# Désactiver la connexion directe en root
PermitRootLogin no
# Authentification par clé publique uniquement
PubkeyAuthentication yes
# Désactiver l'authentification par mot de passe
PasswordAuthentication no
# Activer l'authentification interactive (nécessaire pour le 2FA)
KbdInteractiveAuthentication yes
ChallengeResponseAuthentication yes
UsePAM yes
# Exiger : clé SSH ET validation 2FA
AuthenticationMethods publickey,keyboard-interactive
⚠️ Ne redémarre pas SSH tout de suite ! On configure d’abord le 2FA dans la partie suivante — si tu redémarres maintenant avec AuthenticationMethods publickey,keyboard-interactive sans avoir configuré Google Authenticator, tu risques de te bloquer l’accès.
Partie 4 — Mise en place du 2FA avec Google Authenticator
Étape 1 : Installer le module PAM Google Authenticator
sudo apt install libpam-google-authenticator -y
Étape 2 : Configurer Google Authenticator pour l’utilisateur
google-authenticator
L’assistant te pose plusieurs questions — réponds yes à toutes. Il affiche ensuite un QR code : scanne-le avec l’application Google Authenticator sur ton smartphone. Une fois scanné, un code à 6 chiffres s’affiche et se renouvelle toutes les 30 secondes.

💡 Note les codes de secours affichés lors de la configuration. Si tu perds ton téléphone, ce sont les seuls moyens de te connecter.
Étape 3 : Configurer PAM pour SSH
sudo nano /etc/pam.d/sshd
Dans ce fichier :
- Commenter (mettre un
#devant) la ligne@include common-auth— cela désactive l’authentification par mot de passe système. - Ajouter à la fin du fichier :
auth required pam_google_authenticator.so


Étape 4 : Redémarrer le service SSH
sudo systemctl restart ssh

Partie 5 — Test de la connexion sécurisée
Depuis ton client, connecte-toi en précisant le chemin de ta clé privée :
ssh -i ~/.ssh/id_ed25519 nathan@192.168.122.132

La connexion se déroule en deux temps :
- Passphrase de la clé SSH : saisis le mot de passe que tu as défini lors de la génération de la clé.
- Code de vérification : ouvre Google Authenticator sur ton smartphone et entre le code à 6 chiffres affiché. Attention, il expire toutes les 30 secondes.
Si les deux étapes sont validées, tu es connecté. 🎉
Récapitulatif de l’architecture de connexion
Client SSH ↓ Présentation de la clé ED25519 → Clé non reconnue ? → Connexion refusée → Clé valide ? ↓ Saisie de la passphrase (déverrouillage de la clé) ↓ Code TOTP (Google Authenticator — valide 30s) → Code invalide ? → Connexion refusée → Code valide ? ↓ Accès accordé au serveur 🔒
Commandes utiles
| Commande | Action |
|---|---|
sudo systemctl status ssh | Vérifier l’état du service SSH |
sudo systemctl restart ssh | Redémarrer SSH après une modification de config |
sudo systemctl enable ssh | Activer SSH au démarrage |
ssh-keygen -t ed25519 -a 100 | Générer une nouvelle clé ED25519 |
ssh-copy-id user@ip | Déployer la clé publique sur le serveur |
ssh -i ~/.ssh/id_ed25519 user@ip | Se connecter avec une clé spécifique |
google-authenticator | (Re)configurer le 2FA pour l’utilisateur courant |
sudo nano /etc/ssh/sshd_config | Modifier la configuration du serveur SSH |
Installer et sécuriser un serveur SSH sur Ubuntu/Debian Server