Sécuriser SSH avec Google Authenticator (2FA)
Le mot de passe seul ne suffit plus. Pour sécuriser l'accès à vos serveurs critiques, l'ajout d'un code unique temporaire (OTP) est une pratique recommandée. Ce guide explique comment configurer OpenSSH pour demander un code Google Authenticator à la connexion.
1. Installation du module
Sur les distributions modernes (Debian/Ubuntu), le module PAM nécessaire est directement disponible dans les dépôts officiels. Pas besoin de compiler !
sudo apt update sudo apt install libpam-google-authenticator -y
2. Configuration de l'utilisateur (Génération du Token)
Chaque utilisateur qui souhaite se connecter avec la 2FA doit générer son secret. Connectez-vous avec l'utilisateur concerné (ex: thomas) et lancez :
google-authenticator
L'assistant va vous poser plusieurs questions. Voici les réponses recommandées :
- Make tokens "time-based" (y/n) :
y(C'est le standard TOTP). - Scan du QR Code : Un énorme QR Code s'affiche dans le terminal. Scannez-le avec l'application Google Authenticator (ou Authy, Bitwarden...).
- Update your "/home/user/.google_authenticator" file? :
y(Sauvegarde la config). - Disallow multiple uses of the same authentication token? :
y(Empêche le rejeu d'un code, plus sûr). - Increase the time-skew window? :
n(Sauf si l'horloge de votre serveur n'est pas fiable). - Enable rate-limiting? :
y(Limite les tentatives de brute-force).
3. Configuration de SSH
Il faut maintenant dire à SSH d'utiliser ce module.
A. Activer le module PAM
Editez le fichier PAM de SSH :
sudo nano /etc/pam.d/sshd
Ajoutez cette ligne tout en haut du fichier (ou juste après @include common-auth) :
auth required pam_google_authenticator.so
B. Modifier la config SSH
Editez le fichier de configuration du démon SSH :
sudo nano /etc/ssh/sshd_config
Recherchez et modifiez (ou ajoutez) ces directives. Attention, sur les versions récentes d'OpenSSH, ChallengeResponseAuthentication est remplacé par KbdInteractiveAuthentication.
# Active l'interaction clavier (nécessaire pour demander le code) KbdInteractiveAuthentication yes # (Note : Sur les vieux systèmes, utilisez "ChallengeResponseAuthentication yes") # Assurez-vous que PAM est actif UsePAM yes
4. Finalisation
Redémarrez le service SSH pour appliquer les changements :
sudo systemctl restart ssh
5. Test de connexion
Ouvrez un nouveau terminal (ne fermez pas l'ancien !) et tentez de vous connecter :
ssh thomas@mon-serveur
Le serveur doit vous demander :
Password:(Votre mot de passe système habituel)Verification code:(Le code à 6 chiffres de votre téléphone)
Pour forcer la 2FA même avec une clé, ajoutez cette ligne dans votre
sshd_config :AuthenticationMethods publickey,keyboard-interactive