Désactiver login root SSH et connexion par mot de passe sur Linux
Tant que SSH accepte le login root et l’authentification par mot de passe, votre VPS Linux est exposé à des attaques brute force 24h/24 — bots scannent en permanence le port 22. Ce guide montre comment durcir sshd_config proprement, sans risque de vous bloquer dehors, vérifié contre les recommandations OpenSSH, CIS Benchmarks et Tenable.
Pour un VPS chez HebergTonServ, le port SSH est ouvert par défaut et vous avez l’accès root par email — parfait pour suivre ce guide.
⚠️ CRITIQUE — à lire avant de continuer
Avant de désactiver root + password, vous DEVEZ avoir :
- Un utilisateur sudo créé et testé (guide)
- Une clé SSH publique copiée dans
~/.ssh/authorized_keysde cet utilisateur- Testé la connexion par clé avec succès sur cet utilisateur
- Une deuxième session SSH ouverte comme backup pendant la modif
Sans ces 4 prérequis, vous risquez de vous bloquer dehors définitivement. Seul un reboot rescue console hébergeur vous récupère alors.
Pourquoi durcir SSH ?
| Risque vanilla | Conséquence |
|---|---|
PermitRootLogin yes | Bots tentent root en permanence — username déjà connu |
PasswordAuthentication yes | Brute force possible avec dictionnaire |
| Mot de passe court / commun | Compromission en quelques minutes sous attaque |
Solution : authentification par clé publique uniquement, login root interdit, brute force devient mathématiquement infaisable.
Étape 1 — Vérifier les prérequis
Tester votre utilisateur sudo
Depuis Windows, ouvrez un nouveau terminal :
ssh jean@votre-ip-vpsVous devez :
- Vous connecter sans saisir de mot de passe (clé fonctionne)
- Pouvoir exécuter
sudo whoamiqui retourneroot
Si l’un des deux échoue, STOP — corrigez avant de continuer. Voir Se connecter en SSH depuis Windows et Créer un utilisateur sudo Linux.
Garder une session de secours
Ouvrez un deuxième terminal SSH en tant que jean ET laissez-le ouvert pendant toute la procédure. Si la modif sshd_config casse SSH, cette session reste active et vous pouvez réparer.
Étape 2 — Localiser sshd_config
Toujours connecté en jean :
sudo nano /etc/ssh/sshd_configSur certains systèmes modernes, des overrides existent dans :
/etc/ssh/sshd_config.d/*.confVérifiez :
ls /etc/ssh/sshd_config.d/Les fichiers
.confdanssshd_config.d/prennent priorité sursshd_configprincipal. Cherchez vos modifs là-bas si elles ne s’appliquent pas.
Étape 3 — Modifier les directives clés
Dans sshd_config, trouvez (ou ajoutez si absent) ces 3 lignes :
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes| Directive | Valeur recommandée | Effet |
|---|---|---|
PermitRootLogin | no | Refuse tout login direct en root |
PasswordAuthentication | no | Refuse les mots de passe — clé obligatoire |
PubkeyAuthentication | yes | Active l’auth par clé publique (défaut) |
Variantes pour PermitRootLogin
| Valeur | Sens |
|---|---|
yes | Autorise tout login root (mot de passe + clé) |
no | Refuse tout login root |
prohibit-password | Refuse mot de passe mais autorise root par clé |
forced-commands-only | Root SSH uniquement pour commandes pré-définies |
prohibit-passwordest acceptable si vous gardez un script automatisé (rsync backup) qui doit se connecter en root via clé. Sinonnoest le standard.
Décommenter les lignes
Si une ligne commence par #, retirez le #. Exemple :
Avant :
#PermitRootLogin prohibit-password
#PasswordAuthentication yesAprès :
PermitRootLogin no
PasswordAuthentication noRenforcer encore (optionnel)
ChallengeResponseAuthentication no
KbdInteractiveAuthentication no
UsePAM yes
PermitEmptyPasswords no
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
Protocol 2| Directive | Effet |
|---|---|
MaxAuthTries 3 | Déconnecte après 3 tentatives ratées |
LoginGraceTime 30 | Coupe la connexion si pas de login en 30s |
ClientAliveInterval + Max | Déconnecte les sessions zombies |
Avec
Matchblocks, vous pouvez aussi cibler certains users/groups. Exemple : autoriser uniquement le groupessh-usersà se connecter viaAllowGroups ssh-users.
Étape 4 — Valider la syntaxe avant reload
sudo sshd -t| Sortie | Signification |
|---|---|
| (rien) | Syntaxe OK, vous pouvez reload |
| Message d’erreur avec ligne | Corriger avant de continuer |
Ne jamais reload
sshdsans avoir validé la syntaxe. Une erreur ferait échouer le démarrage du démon → plus aucun SSH possible.
Étape 5 — Recharger sshd
sudo systemctl reload ssh # Debian / Ubuntu
sudo systemctl reload sshd # RHEL / CentOS / Fedora
reload(pasrestart) : reload applique la nouvelle conf sans couper les sessions existantes. Votre session de backup reste active.
Étape 6 — Tester depuis un nouveau terminal
Sans fermer votre session de backup, ouvrez un 3e terminal et testez :
Test 1 — Tentative root (doit échouer)
ssh root@votre-ip-vpsSortie attendue :
Permission denied (publickey).Test 2 — Tentative password (doit échouer)
Ajoutez -o PreferredAuthentications=password pour forcer le mode mot de passe :
ssh -o PreferredAuthentications=password jean@votre-ip-vpsSortie attendue :
Permission denied (publickey).Test 3 — Tentative clé sur user sudo (doit réussir)
ssh jean@votre-ip-vpsConnecté ? Le hardening fonctionne.
Si Test 3 échoue, retournez à votre session de backup (toujours ouverte), restaurez
sshd_configen remettantPasswordAuthentication yes, reload, et investiguez les permissions de~/.ssh/authorized_keys.
Workflow récap — sans risque
1. Créer user sudo → ssh jean@vps fonctionne
2. Copier clé pub dans authorized_keys
3. Tester ssh jean sans mot de passe → OK
4. Garder 2 sessions ouvertes
5. Éditer sshd_config :
- PermitRootLogin no
- PasswordAuthentication no
6. sudo sshd -t (valider)
7. sudo systemctl reload ssh
8. Tester depuis 3e terminal
9. Si OK : fermer toutes les sessions
Si KO : revenir aux sessions backup et corrigerBonus — bloquer les bots avant qu’ils tentent
Couplez ce hardening avec :
- Fail2Ban — bannit les IPs après échecs répétés. Voir : Installer Fail2Ban sur Linux
- Changer le port SSH — divise par 100 le bruit des bots. Voir : Changer le port SSH
- UFW — limite l’accès SSH à certaines IPs si possible
sudo ufw allow from VOTRE_IP_FIXE to any port 22FAQ
J’ai cassé sshd_config et plus aucun SSH ne fonctionne, comment récupérer ?
Trois options dans l’ordre de difficulté :
- Session backup encore ouverte : utilisez-la pour
sudo nano /etc/ssh/sshd_configet corriger - Console rescue de l’hébergeur (KVM/IPMI/VNC) — accès direct sans SSH
- Boot rescue mode depuis l’image de réinstallation, montez
/, corrigez
Mon hébergeur fournit-il une console de secours ?
La plupart des sérieux oui (HebergTonServ, OVH, Hetzner). C’est une fonctionnalité essentielle d’un VPS pro. Vérifiez avant d’acheter.
Puis-je désactiver root login mais garder les mots de passe ?
Oui : PermitRootLogin no + PasswordAuthentication yes. Sécurité partielle — le brute force ne cible plus root mais peut encore tenter d’autres usernames. Préférez la combo no/no avec clés.
Le port 22 est trop attaqué, dois-je le changer ?
Oui — passe de 1000+ tentatives/jour à <10. Voir : Changer le port SSH. Note : un changement de port n’est pas une mesure de sécurité forte (security through obscurity), c’est une réduction de bruit.
Comment savoir si quelqu’un a tenté de brute force ?
sudo journalctl -u ssh | grep -i "failed\|invalid"
sudo cat /var/log/auth.log | grep -i "failed\|invalid"Avec Fail2Ban :
sudo fail2ban-client status sshdQue faire si je perds ma clé privée SSH ?
Si vous avez encore une session ouverte : ajoutez une nouvelle clé publique dans authorized_keys. Sinon, utilisez la console rescue de l’hébergeur pour copier une nouvelle clé. Pour cela, HebergTonServ fournit un accès console KVM.
Conclusion
Désactiver le login root SSH et l’auth par mot de passe transforme votre VPS d’une cible facile en forteresse. Combiné avec une clé ED25519, Fail2Ban et un port SSH custom, votre serveur devient mathématiquement résistant au brute force. Le seul risque : se bloquer dehors par accident — d’où la session de backup obligatoire.
Pour un VPS Linux avec console KVM de secours et accès root par email, HebergTonServ propose des serveurs premium dès quelques euros par mois.


