Linux / Tutoriel

Sécuriser l'accès SSH d'un serveur Linux

Passer aux clés SSH, interdire la connexion root et les mots de passe, sans jamais se retrouver enfermé dehors.

Linux Tutoriel Intermédiaire Publié le 16 octobre 2026 12 min de lecture Testé sur : Ubuntu 24.04 (OpenSSH 9.6). Même méthode sous Debian 12 et 13.
Écran affichant du code
Photo : Pankaj Patel sur Unsplash

Avant de commencer

  • Un serveur Linux accessible en SSH, avec un compte qui a les droits sudo
  • Un terminal sur votre poste : Terminal (macOS, Linux) ou PowerShell (Windows 10 et 11)
  • Une console de secours (écran et clavier, console de l'hyperviseur ou de l'hébergeur) en cas d'erreur

Un serveur exposé en SSH reçoit en permanence des tentatives de connexion automatisées qui essaient des milliers de couples identifiant/mot de passe. La parade la plus efficace : n'accepter que les clés SSH, et interdire la connexion directe en root.

Ce tutoriel suit un ordre précis pour ne jamais vous couper l'accès : on installe et teste la clé avant de désactiver les mots de passe.

1. Créer une paire de clés sur votre poste

Sur votre ordinateur (pas sur le serveur) :

ssh-keygen -t ed25519 -C "spo@poste-bureau"
  • Acceptez l'emplacement proposé (~/.ssh/id_ed25519).
  • Choisissez une phrase de passe : elle protège la clé si votre poste est volé. L'agent SSH la retiendra pour la session.

Deux fichiers sont créés :

Fichier Rôle À partager ?
id_ed25519 Clé privée Jamais, elle ne quitte pas votre poste
id_ed25519.pub Clé publique Oui, c'est elle qu'on copie sur les serveurs

2. Installer la clé publique sur le serveur

Linux et macOS :

ssh-copy-id admin@192.168.1.50

Windows (PowerShell), où ssh-copy-id n'existe pas :

Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh admin@192.168.1.50 "umask 077; mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Remplacez admin par votre utilisateur et l'adresse par celle du serveur.

3. Tester la connexion par clé

ssh admin@192.168.1.50

La connexion doit aboutir sans demander le mot de passe du compte (seulement la phrase de passe de la clé, si vous en avez mis une).

Attention

Ne passez pas à l'étape suivante si ce test échoue. Vérifiez les droits sur le serveur : chmod 700 ~/.ssh et chmod 600 ~/.ssh/authorized_keys, le dossier personnel ne doit pas être modifiable par les autres utilisateurs.

4. Durcir la configuration du serveur

Plutôt que de modifier le fichier principal /etc/ssh/sshd_config, créez un fichier dédié dans /etc/ssh/sshd_config.d/. Il survit aux mises à jour du paquet et se repère facilement.

sudo nano /etc/ssh/sshd_config.d/00-durcissement.conf

Contenu :

# Authentification par clé uniquement
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
AuthenticationMethods publickey

# Pas de connexion directe en root : on se connecte puis on utilise sudo
PermitRootLogin no

# Limiter les essais et le délai de connexion
MaxAuthTries 3
LoginGraceTime 30

# Fonctions inutiles sur un serveur
X11Forwarding no

# Seuls ces comptes peuvent se connecter (séparés par des espaces)
AllowUsers admin

Pourquoi le préfixe « 00- » ?

Pour OpenSSH, la première valeur lue l'emporte. Les fichiers de sshd_config.d/ sont lus par ordre alphabétique, avant le reste de sshd_config. Un fichier comme 50-cloud-init.conf, créé par certaines images cloud, peut réactiver PasswordAuthentication yes : le préfixe 00- garantit que vos réglages passent avant.

5. Vérifier puis appliquer, sans fermer la session

Vérifiez la syntaxe. La commande ne doit rien afficher :

sudo sshd -t

Vérifiez la configuration réellement appliquée :

sudo sshd -T | grep -Ei '^(passwordauthentication|kbdinteractiveauthentication|permitrootlogin|allowusers)'

Résultat attendu :

permitrootlogin no
passwordauthentication no
kbdinteractiveauthentication no
allowusers admin

Rechargez le service :

sudo systemctl reload ssh       # Debian, Ubuntu
sudo systemctl reload sshd      # Fedora, RHEL, Rocky, Alma, Arch

Danger

Gardez votre session actuelle ouverte. Ouvrez un second terminal et testez une nouvelle connexion. Si elle échoue, corrigez depuis la première session, toujours connectée.

6. Contrôler que les mots de passe sont bien refusés

Depuis votre poste, forcez une tentative par mot de passe :

ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password admin@192.168.1.50

Réponse attendue : Permission denied (publickey). Le serveur ne propose même plus le mot de passe.

Aller plus loin

  • Pare-feu : n'autorisez le port 22 que depuis vos réseaux d'administration ou votre VPN. C'est plus efficace que toute autre mesure.
  • Fail2ban ou CrowdSec : bannissent temporairement les adresses qui multiplient les échecs. Utiles sur un serveur exposé à Internet, moins indispensables une fois les mots de passe désactivés.
  • Changer de port : réduit le bruit dans les journaux, mais n'apporte pas de sécurité réelle. Sous Ubuntu 22.10 et suivantes, SSH peut être démarré par ssh.socket : le port se change alors dans la configuration du socket, pas seulement dans sshd_config.
  • Journaux : sudo journalctl -u ssh --since today (ou -u sshd) montre les connexions et les échecs.

En cas de problème

Symptôme Cause probable Solution
Permission denied (publickey) avec votre clé Mauvais droits sur ~/.ssh ou clé absente de authorized_keys Corriger les droits (étape 3), vérifier le contenu du fichier
Le mot de passe est encore accepté Un autre fichier de sshd_config.d/ passe avant le vôtre Vérifier avec sudo sshd -T, renommer votre fichier avec un préfixe plus petit
Plus aucun accès Erreur de configuration et session fermée Se connecter par la console de secours, supprimer 00-durcissement.conf, recharger le service

À lire aussi