Conflits de ports SSH : Comment identifier et changer les ports

Résolvez les problèmes frustrants de connexion SSH causés par des conflits de ports. Ce guide explique comment identifier de manière définitive le port SSH actif à l'aide de commandes système (`ss`/`netstat`) et fournit une méthodologie étape par étape et sécurisée pour modifier le fichier de configuration (`sshd_config`) et mettre à jour les pare-feu afin de passer à un nouveau numéro de port, évitant ainsi les blocages.

Conflits de ports SSH : Comment identifier et changer les ports

SSH écoute normalement sur le port TCP 22, mais les serveurs réels ne sont pas toujours aussi ordonnés. Une image cloud peut avoir déplacé SSH vers 2222. Un hôte de conteneurs peut publier plusieurs services de type SSH via différents ports. Un script de durcissement peut avoir modifié sshd_config il y a des mois. Ou sshd peut tout simplement ne pas démarrer car un autre processus est déjà lié à la même adresse et au même port.

Les problèmes de port se manifestent généralement par un Connexion refusée ou Délai de connexion dépassé. La différence est importante : refusée signifie généralement que vous avez atteint l'hôte mais que rien n'a accepté la connexion sur ce port. Le délai dépassé signifie généralement qu'un pare-feu, une route, un groupe de sécurité ou un chemin réseau a bloqué le trafic.


Comprendre les conflits de ports SSH

Un conflit de port survient lorsque deux services réseau distincts tentent d'écouter les connexions entrantes sur le même numéro de port TCP ou UDP. Comme un seul processus peut se lier à un port spécifique sur une adresse IP à un moment donné, le deuxième service qui tente de démarrer échouera généralement ou utilisera un port différent s'il est configuré pour cela.

Pour SSH, un véritable conflit de liaison signifie que sshd ne peut pas écouter sur l'adresse et le port configurés. Un problème plus courant est plus simple : SSH écoute sur un port, tandis que le client ou le pare-feu en utilise un autre.

Problèmes de connexion courants liés aux ports

Lors du dépannage de la connectivité SSH, les problèmes de port se manifestent souvent par :

  1. Connexion refusée : Cela signifie généralement que la machine cible est joignable, mais qu'aucun service n'écoute activement sur le port spécifié (soit le mauvais port a été utilisé, soit le service SSH n'a pas démarré).
  2. Délai de connexion dépassé : Cela indique souvent que le trafic destiné à ce port est bloqué par un pare-feu (soit au niveau de l'hôte, soit au niveau du réseau) ou que l'hôte lui-même est inaccessible.

Étape 1 : Identifier le port SSH actuellement actif

Avant d'apporter des modifications, vous devez confirmer sur quel port le démon SSH écoute réellement. Cela nécessite un accès administratif (généralement via la console ou une connexion existante réussie).

A. Vérification du fichier de configuration SSH

L'emplacement principal de la configuration SSH est le fichier sshd_config. La directive Port spécifie le port sur lequel sshd écoute.

Emplacement : /etc/ssh/sshd_config (Commun sur les systèmes Linux/Unix)

Utilisez un éditeur de texte comme nano ou vim pour inspecter le fichier :

sudo nano /etc/ssh/sshd_config

Recherchez la ligne commençant par Port. Si elle est commentée, OpenSSH utilise le port par défaut 22, sauf si un autre fichier de configuration inclus le remplace.

#Port 22
Port 2222

Vérifiez également les extraits de configuration inclus :

grep -R "^[[:space:]]*Port" /etc/ssh/sshd_config /etc/ssh/sshd_config.d 2>/dev/null

B. Vérification des sockets d'écoute avec netstat ou ss

La façon la plus fiable de confirmer le port auquel le service est actuellement lié est de vérifier les sockets d'écoute réseau du système d'exploitation. L'outil moderne est ss, mais netstat est encore largement disponible.

Utilisation de la commande ss (Recommandé sur les systèmes modernes) :

Cette commande affiche tous les écouteurs TCP (-t), y compris les processus (-p), en filtrant pour le service SSH (grep sshd).

sudo ss -tlpn | grep sshd

Exemple de sortie (Port par défaut) :

LISTEN 0      128    0.0.0.0:22               0.0.0.0:*    users:(("sshd",pid=1234,fd=3))

Exemple de sortie (Port personnalisé 2222) :

LISTEN 0      128    0.0.0.0:2222             0.0.0.0:*    users:(("sshd",pid=1234,fd=3))

Utilisation de netstat (Alternative) :

sudo netstat -tulpn | grep sshd

Une fois que vous avez identifié le port (par exemple, 2222), vous devez utiliser ce numéro de port lors de la connexion depuis un client distant.


Étape 2 : Changer le port SSH en toute sécurité

Changer le port SSH est une pratique courante de durcissement de la sécurité. Crucialement, ne changez jamais le port avant d'avoir vérifié que votre nouvelle configuration fonctionne, sinon vous risquez de vous bloquer.

A. La séquence sécurisée pour changer les ports

Suivez ces étapes précisément pour éviter de perdre l'accès :

  1. Vérifiez l'accès au pare-feu : Assurez-vous que le nouveau port est ouvert dans votre pare-feu basé sur l'hôte (par exemple, ufw ou firewalld) avant de redémarrer le service SSH.
  2. Modifiez la configuration : Modifiez /etc/ssh/sshd_config avec le nouveau numéro de port.
  3. Testez la syntaxe de la configuration : Testez la syntaxe de la configuration avant de redémarrer.
  4. Redémarrez le service SSH : Appliquez les modifications.
  5. Testez la connexion à distance : Essayez immédiatement de vous connecter en utilisant le nouveau port depuis une session de terminal séparée.
  6. Supprimez l'ancienne règle de port (Optionnel) : Une fois vérifié, fermez l'ancien port (22) dans le pare-feu.

B. Modification de /etc/ssh/sshd_config

Utilisez votre éditeur préféré pour ouvrir le fichier de configuration :

sudo nano /etc/ssh/sshd_config

Localisez la ligne Port. Modifiez la valeur existante ou décommentez/ajoutez une nouvelle directive Port. Changeons de 22 à 2222.

# Changez cette ligne :
Port 2222

Sauvegardez et fermez le fichier.

C. Mise à jour des pare-feu basés sur l'hôte (Étape cruciale)

Si vous sautez cette étape, votre connexion échouera avec un délai dépassé après le redémarrage du service.

Utilisation de UFW (Ubuntu/Debian) :

# 1. Autorisez le nouveau port
sudo ufw allow 2222/tcp

# 2. Si vous souhaitez supprimer l'ancienne règle de port plus tard (après test) :
# sudo ufw delete allow 22/tcp

sudo ufw status verbose

Utilisation de Firewalld (RHEL/CentOS/Fedora) :

# 1. Autorisez le nouveau port de manière permanente
sudo firewall-cmd --permanent --add-port=2222/tcp

# 2. Rechargez les règles du pare-feu
sudo firewall-cmd --reload

D. Test et rechargement du démon SSH

Testez toujours la syntaxe du fichier de configuration avant d'appliquer les modifications :

sudo sshd -t

Si la syntaxe est correcte, rechargez ou redémarrez le service :

sudo systemctl reload sshd
# Si votre système utilise le nom de service ssh à la place :
# sudo systemctl reload ssh

Ensuite, vérifiez l'état :

sudo systemctl status sshd

Laissez votre session SSH actuelle ouverte et testez le nouveau port depuis un terminal séparé avant de fermer quoi que ce soit.

E. Connexion via le nouveau port

Depuis votre machine cliente, vous devez maintenant spécifier explicitement le nouveau port en utilisant l'option -p avec la commande ssh :

ssh nom_utilisateur@adresse_ip_serveur -p 2222

Si la connexion réussit, le changement de port a fonctionné. Ce n'est qu'alors que vous devez supprimer l'ancienne règle de pare-feu.

Avertissement : Si vous changez le port et ne l'ouvrez pas dans le pare-feu, ou si sshd ne parvient pas à se recharger, vous pouvez vous bloquer. Gardez une console, un accès série, une récupération cloud ou un autre chemin administratif disponible.


Dépannage des échecs de connexion après le changement de port

Si vous recevez une erreur après avoir changé le port, suivez cette liste de vérification rapide :

Symptôme d'erreur Cause(s) probable(s)
Connexion refusée 1. sshd n'a pas démarré (vérifiez systemctl status sshd). 2. Vous avez spécifié le mauvais port dans la commande client. 3. Le pare-feu autorise le trafic sur l'ancien port (22) mais bloque le nouveau port (2222).
Délai de connexion dépassé 1. L'hôte est hors service. 2. Le pare-feu de l'hôte (UFW/firewalld) supprime activement les paquets pour le nouveau port. 3. Le pare-feu de l'infrastructure réseau bloque le port.

Pour confirmer que le démon écoute, réexécutez sudo ss -tlpn | grep sshd côté serveur.

Une façon plus sûre de penser aux changements de port

Ne faites pas confiance uniquement au fichier de configuration, et ne faites pas confiance uniquement au pare-feu. Confirmez les trois couches : sshd_config indique le port attendu, ss montre que sshd écoute réellement sur ce port, et le pare-feu ou le groupe de sécurité cloud autorise le trafic à l'atteindre. Lorsque ces trois éléments concordent, la commande client est simple :

ssh -p 2222 nom_utilisateur@adresse_ip_serveur

Changer le port SSH peut réduire les scans automatisés bruyants sur le port 22, mais ce n'est pas un remplacement pour l'authentification par clé, des règles de pare-feu sensées, des systèmes corrigés et la désactivation de la connexion par mot de passe lorsque cela est approprié.