Changer le port SSH sans se bloquer l'accès

Gardez votre session ouverte. Ouvrez le nouveau port dans le pare-feu, ajoutez Port 22 et Port 2222 à la configuration de sshd, puis appliquez. Sur Ubuntu récent, cela donne sudo systemctl daemon-reload et sudo systemctl restart ssh.socket. Testez ssh -p 2222 user@server dans un nouveau terminal, puis retirez le port 22. Cela réduit le bruit dans les journaux, pas les vraies attaques.

Mis à jour le . Procédure complète exécutée sur Ubuntu 24.04 et 26.04 (socket et ufw), Debian 13 (service) et Rocky Linux 9 (firewalld), le tout dans des conteneurs jetables avec systemd.

Ce que cela protège, et ce que cela ne protège pas

Un nouveau port arrête les scans automatiques qui n'essaient que le port 22 : vos journaux deviennent beaucoup plus calmes. C'est tout l'intérêt. Un scan de tous les ports trouve quand même SSH, car le serveur s'annonce dès que quelque chose s'y connecte. Les mots de passe faibles restent faibles sur n'importe quel port. Faites d'abord ce qui compte vraiment : désactivez la connexion par mot de passe et revoyez la configuration de sshd.

Cela a aussi de petits coûts : chaque outil a maintenant besoin du port, et votre known_hosts traite le nouveau port comme une nouvelle entrée, donc vous confirmez de nouveau l'empreinte.

Choisissez un port que rien d'autre n'utilise. Les ports inférieurs à 1024 ne peuvent être ouverts que par root, ce qui est un petit avantage si sshd tombe un jour.

1. Garder un chemin de retour

Gardez votre session actuelle ouverte jusqu'à la dernière étape. Une session existante survit normalement à un redémarrage de sshd : c'est votre chemin de retour. Si vous pouvez accéder à une console chez votre hébergeur, repérez-la avant de commencer.

2. Ouvrir d'abord le nouveau port

Avec ufw :

sudo ufw allow 2222/tcp

Avec firewalld, sur RHEL, Rocky, AlmaLinux et Fedora :

sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload

Un serveur cloud a aussi généralement un pare-feu ou un groupe de sécurité dans le panneau de l'hébergeur. Ouvrez-y aussi le port. C'est la cause la plus fréquente d'un délai dépassé après ce changement.

SELinux

Sur les systèmes de la famille RHEL avec SELinux en mode enforcing, sshd ne peut pas utiliser un nouveau port tant que vous ne l'avez pas étiqueté. Le sshd_config par défaut de ces systèmes le dit aussi. Vérifiez, puis ajoutez l'étiquette :

getenforce
sudo semanage port -a -t ssh_port_t -p tcp 2222
sudo semanage port -l | grep ssh

Si getenforce répond Disabled, passez cette étape. Dans cet état, semanage échoue avec SELinux policy is not managed or store cannot be accessed, ce qui est sans conséquence. Si semanage manque, il vient avec le paquet policycoreutils-python-utils.

3. Ajouter le nouveau port à côté de l'ancien

Ne remplacez pas encore l'ancien port. Créez un petit fichier, ce qui laisse la configuration principale intacte :

printf 'Port 22\nPort 2222\n' | sudo tee /etc/ssh/sshd_config.d/10-port.conf
sudo sshd -t

Si sshd -t n'affiche rien, la syntaxe est valide. Les systèmes plus anciens sans ce dossier ont besoin des mêmes deux lignes dans /etc/ssh/sshd_config.

4. Appliquer : cela dépend du système

Demandez d'abord dans quel cas vous êtes :

systemctl is-active ssh.socket

Il répond active (Ubuntu 24.04 et 26.04 par défaut). Le socket détient le port et il est généré à partir de votre configuration : redémarrer le service ne suffit donc pas :

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket

C'est le piège habituel. Dans notre test, sudo systemctl restart ssh seul laissait les anciens ports en écoute sans aucune erreur.

Il répond inactive (Debian, Ubuntu 22.04) :

sudo systemctl restart ssh

Famille RHEL, où le service porte un autre nom :

sudo systemctl restart sshd

Ubuntu 22.10 à 23.10 utilisaient le socket différemment et ne sont plus pris en charge. Dans ce cas, vérifiez systemctl cat ssh.socket avant de vous fier à ces étapes.

Vérifiez maintenant que les deux ports écoutent :

ss -tln | grep -E ':(22|2222)\b'

5. Tester depuis un nouveau terminal

Laissez l'ancienne session ouverte et, depuis votre propre machine, lancez :

ssh -p 2222 user@server

Un délai dépassé signifie qu'un pare-feu bloque encore. Connection refused signifie que rien n'écoute, ou que SELinux a empêché sshd de se lier au port. Corrigez maintenant, tant que le port 22 fonctionne encore.

6. Fermer le port 22

Seulement une fois le test réussi :

echo 'Port 2222' | sudo tee /etc/ssh/sshd_config.d/10-port.conf
sudo sshd -t

Si le fichier principal /etc/ssh/sshd_config contient une ligne Port 22 non commentée, commentez-la aussi, sinon sshd continue d'écouter sur ce port. Appliquez comme à l'étape 4, confirmez avec sudo sshd -T | grep -i ^port, puis supprimez l'ancienne règle du pare-feu, en utilisant celle qui s'applique :

sudo ufw delete allow 22/tcp
sudo ufw delete allow OpenSSH
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload

Testez encore une fois dans un nouveau terminal, et ne fermez l'ancienne session qu'ensuite.

Mettre à jour votre client

Enregistrez le port pour ne plus avoir à le taper :

Host server
    HostName 203.0.113.10
    Port 2222
    User user

Pour d'autres réglages à garder par hôte, voyez ces exemples de fichier ssh config.

Notez que scp utilise un -P majuscule pour le port, contrairement à ssh. Si vous utilisez fail2ban, indiquez-lui aussi le nouveau port. Voir fail2ban pour SSH.

Questions

Changer le port SSH en vaut-il la peine ?

Cela réduit le bruit des robots qui n'essaient que le port 22. Cela n'arrête pas une attaque ciblée : la connexion par clé seule et un serveur à jour comptent davantage.

Pourquoi le nouveau port SSH ne marche-t-il pas sous Ubuntu 24.04 ?

Ubuntu 24.04 démarre sshd via ssh.socket. Après avoir changé Port, lancez sudo systemctl daemon-reload et sudo systemctl restart ssh.socket, puis vérifiez avec ss -tln.

Comment se connecter en SSH sur un autre port ?

Utilisez ssh -p 2222 utilisateur@serveur, ou ajoutez Port 2222 sous l'entrée Host du serveur dans ~/.ssh/config. scp prend le port avec un -P majuscule.

Sources

Autres guides : Sécuriser un serveur

Tous les guides