changer le port d'écoute sur Debian 13 (`ssh.socket`)
Le problème
Après avoir configuré un port SSH personnalisé (ici 1234) dans /etc/ssh/sshd_config, la connexion échoue :
Pourtant, la configuration côté client (~/.ssh/config) est correcte :
Côté serveur, sshd_config contient bien :
Et pourtant, sshd continue d'écouter sur le port 22 :
Piège sur la commande de test
Une commande comme ssh -P 1234 [email protected] semble fonctionner, mais le -P majuscule n'est pas l'option de port de ssh (c'est celle de scp). Elle est ignorée pour la connexion, qui se fait alors sur le port 22 par défaut. L'option correcte est -p en minuscule : ssh -p 1234 [email protected].
L'origine
Sur Debian 13, le serveur SSH est démarré par activation par socket (ssh.socket) :
systemdouvre lui-même le port d'écoute, défini dansssh.socket(ListenStream, par défaut le port 22) ;ssh.serviceest lancé par systemd à la demande, en recevant le socket déjà ouvert.
Dans ce mode, la directive Port de sshd_config est ignorée : ce n'est pas sshd qui choisit le port, mais systemd.
On peut le constater avec :
La résolution
Il y a deux approches possibles.
Option 1 : désactiver l'activation par socket (la plus simple)
On revient au fonctionnement classique : sshd est lancé directement et respecte sshd_config.
sudo systemctl disable --now ssh.socket
sudo systemctl restart ssh.service
sudo systemctl enable ssh.service
Vérification :
Le port 1234 doit apparaître, géré par sshd.
Option 2 : configurer le port dans ssh.socket
On conserve l'activation par socket et on modifie le port d'écoute du socket via un fichier de surcharge :
Contenu à ajouter :
Note
La première ligne ListenStream= vide est indispensable : elle réinitialise la valeur par défaut (port 22). Sans elle, le socket écouterait sur les deux ports.
Il faut ensuite arrêter les deux unités avant de relancer le socket :
sudo systemctl stop ssh.service ssh.socket
sudo systemctl daemon-reload
sudo systemctl start ssh.socket
Erreur « Socket service ssh.service already active, refusing »
Si on arrête uniquement ssh.socket, le sshd lancé précédemment reste actif et garde le port 22 ouvert. systemd refuse alors de démarrer le socket :
ssh.socket: Socket service ssh.service already active, refusing.
Failed to listen on ssh.socket - OpenBSD Secure Shell server socket.
La solution est d'arrêter aussi ssh.service (et, au besoin, de repérer un démon orphelin avec pgrep -a sshd).
Vérification
Depuis le poste client, dans un nouveau terminal (sans fermer la session en cours) :
ssh -p 1234 [email protected]
# ou, avec l'entrée du fichier ~/.ssh/config :
ssh openvpn
Bonnes pratiques
- Garder une session SSH ouverte (ou la console Proxmox/VM à portée de main) pendant la manipulation, pour ne pas se retrouver bloqué dehors.
- Penser à ouvrir le nouveau port dans le pare-feu de la VM s'il y en a un.
- Utiliser
-p(minuscule) avecsshet-P(majuscule) avecscp.
Résumé
| Symptôme | Connection refused sur le port personnalisé, sshd écoute toujours sur le 22 |
| Cause | ssh.socket (activation par socket) impose le port, Port de sshd_config est ignoré |
| Solution | Désactiver ssh.socket ou définir ListenStream dans une surcharge de ssh.socket |