12 votes

SSH se réinitialise sur le port par défaut au redémarrage

J'ai changé le port SSH par défaut sur mon serveur domestique (dans le fichier /etc/ssh/sshd_config) au port 54747, puis j'ai redémarré les services ssh et sshd (jamais sûr lequel donc j'ai fait les deux juste pour être sûr). Pour tester ma configuration, je me suis déconnecté puis reconnecté sans aucun problème.

Quelques jours plus tard, j'ai installé les mises à jour via apt, puis j'ai redémarré mon serveur. Lorsque j'ai essayé de me reconnecter en SSH (sur le port 54747), j'ai reçu une erreur de connexion refusée.

Pour une raison inconnue, j'ai essayé de me connecter en SSH sur le port par défaut, et cela a fonctionné ! Je suis retourné vérifier dans le sshd_config, mais le port personnalisé était toujours là. J'ai donc redémarré les services ssh et sshd, et tout est revenu à un comportement "normal" (SSH sur le port 54747). J'ai essayé de redémarrer à nouveau, et connexion refusée à nouveau...

Est-ce que quelqu'un sait ce que j'ai fait de travers ?

Détails supplémentaires :

  • Ubuntu 16.04.2 LTS
  • Le serveur est également utilisé comme HTPC, avec une session ouverte (même utilisateur que SSH) sur ma TV
  • Je me connecte en SSH en utilisant la clé RSA de mon ordinateur portable, et j'ai désactivé l'authentification par mot de passe
  • Je rebootais avec sudo reboot -h now, mais après avoir cherché, j'ai découvert que cela était déconseillé par certaines personnes, donc j'ai essayé sudo reboot, mais aucune différence

EDIT Séquence des événements :

  1. Changer le port SSH de 22 à 54747 dans /etc/ssh/sshd_config
  2. Redémarrer les services ssh et sshd
  3. Terminer la session SSH actuelle
  4. Se reconnecter avec succès en SSH sur le port 54747
  5. Redémarrer
  6. Erreur de connexion SSH sur le port 54747, mais réussite sur le port 22
  7. Redémarrer les services ssh et sshd
  8. Se reconnecter avec succès en SSH sur le port 54747, erreur de connexion sur le port 22
  9. Redémarrer et retour à l'étape 6

EDIT 1 : Sortie de la commande netstat

rgo@ATLAS:~$ sudo netstat -lntp | grep :54747
rgo@ATLAS:~$ sudo netstat -lntp | grep :22
tcp6       0      0 :::22                   :::*                    LISTEN      1/init  

EDIT 2 : Statut du service sshd

 ssh.service - Serveur OpenBSD Secure Shell
   Chargé : chargé (/lib/systemd/system/ssh.service; activé; préréglage du fournisseur : activé)
   Actif : inactif (mort)

EDIT 3 : lsof -i | grep ssh

systemd      1     root   46u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
systemd      1     root   49u  IPv6  14641      0t0  TCP *:ssh (LISTEN)
sshd      4088     root    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4088     root    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)

Pour référence, ATLAS est le nom d'hôte du serveur distant, 192.168.1.27 est l'IP LAN de mon ordinateur portable, et la commande a été exécutée entre les étapes 6 et 7

ufw status

Status: inactif

EDIT 4 : ps -ef |grep sshd

root      4088     1  0 22:40 ?        00:00:00 sshd: rgo [priv]
rgo       4202  4088  0 22:40 ?        00:00:00 sshd: rgo@pts/1 sshd

3voto

Robie Basak Points 14936

Ssh peut être "socket activé" par systemd selon la configuration, ce qui signifie qu'au départ, c'est systemd qui configure le port d'écoute, et sshd n'est démarré que lorsque qu'un client se connecte pour la première fois. Cela permet d'accélérer le temps de démarrage : les démons de service ne sont démarrés qu'à la demande.

Cependant, cela signifie que vous devez également configurer systemd pour le port correspondant. Vous trouverez la configuration du système dans /lib/systemd/system/ssh.socket qui liste ListenStream=22. Pour remplacer ceci, créez un fichier /etc/systemd/system/ssh.socket.d/port.conf (en créant le répertoire ssh.socket.d si nécessaire) qui contient :

[Socket]
ListenStream=
ListenStream=54747

Changez le numéro vers le port désiré. La première entrée vide efface le paramètre par défaut précédent, et l'entrée suivante ajoute le nouveau. Cela remplace la valeur par défaut fournie dans /lib/systemd/system/ssh.socket et doit être fait en plus de changer /etc/ssh/sshd_config.

Ensuite, exécutez sudo systemctl daemon-reload pour informer systemd de vos modifications, et sudo systemctl reload ssh si votre démon ssh était déjà en cours d'exécution.

0voto

jones0610 Points 1636

Ssh est le processus client qui arbitre et maintient une connexion de session utilisateur au serveur ssh. sshd est le démon qui s'exécute sur le serveur ssh pour écouter et authentifier les demandes de connexion ssh.

Le fichier de configuration sur le serveur sshd qui est lu lors du démarrage du service sshd (qui nécessite des privilèges sudo pour être modifié) est

/etc/ssh/sshd_config

Le service devrait démarrer à partir de

/etc/systemd/system/sshd.service

Pour redémarrer sshd, ce qui impliquerait de relire le fichier sshd_config

sudo service sshd restart

Pour voir sur quel port le démon sshd écoute, ainsi que d'autres informations utiles, sur le serveur ssh tapez

sudo service sshd status

Effectuez ces étapes dans l'ordre spécifié :

Redémarrez le serveur ssh

Ouvrez une session terminal sur le serveur ssh (pas une connexion ssh vers celui-ci)

Tapez hostname

Si le nom d'hôte ne renvoie pas le nom du serveur ssh (Atlas dans ce cas), refaites l'étape précédente correctement.

grep Port /etc/ssh/sshd_config - notez le numéro de port. Devrait être celui que vous avez spécifié

sudo service sshd status

Si l'état indique qu'il est actif, en cours d'exécution et écoutant sur le port personnalisé que vous avez spécifié, alors vous êtes bon de ce côté-là. Sinon, le démarrage du service ne semble peut-être pas appeler le fichier sshd_config que vous avez modifié mais un autre fichier de configuration contenant des informations par défaut. Si le service n'a pas démarré (indique "dead" et non actif et en cours d'exécution), alors il s'agit d'un problème différent de ce que vous avez demandé.

Ces étapes identifieront probablement la cause du problème que vous avez demandé.

Pour des fins de test et de simplicité : Du côté client, depuis une session terminal, vous vous connecterez en ssh au serveur ssh comme suit

ssh -l nom_utilisateur -p 54747 nom_hôte

D'après le feedback de OP, je soupçonne que sshd ne démarre pas automatiquement au démarrage mais démarre correctement lorsqu'il est invoqué manuellement. Les connexions ssh réussies via le port 22 pourraient donc NE PAS se connecter au serveur ssh mais à autre chose (par ex. localhost). Pour le prouver ou le réfuter, après vous êtes connecté via ssh, tapez

hostname

D'après ce que dit OP, je suppose que le nom d'hôte ne sera pas le serveur ssh atlas.

Pour isoler davantage ceci, après avoir redémarré le serveur ssh mais avant de faire quoi que ce soit d'autre, depuis une session terminal sur le serveur ssh (Atlas) tapez

ssh localhost

Si cela échoue, comme cela devrait être le cas, alors

ssh -p 54747 localhost

Si cela ne fonctionne pas non plus, cela confirmera les résultats obtenus lors de

sudo service sshd status

0voto

G_Style Points 393

Vérifiez vos paramètres de port dans le fichier /etc/ssh/sshd_config. Assurez-vous que vous modifiez en tant que sudo ou un utilisateur du groupe sudo. Tout ce que vous avez à faire pour définir le port est, sur une ligne taper Port 54747. Maintenant, redémarrez le service ssh en exécutant service sshd restart. Ensuite, vérifiez que ssh écoute sur ce port en exécutant sudo netstat -lntp | grep ssh. Redémarrez et testez.

Vérifiez également vos paramètres réseau. Si vous êtes sur un réseau d'entreprise, assurez-vous d'être dans le bon vlan.

0voto

pa4080 Points 27038

Parfois, les choses ne se passent pas comme prévu. Si j'étais à votre place, j'essaierais avec:

cp /etc/ssh/sshd_config $HOME
sudo apt-get --reinstall install openssh-server

0voto

Marco Points 186

Probablement vous avez simplement répondu Y lorsque apt a détecté des différences entre votre sshd_config et celui du package. Il vous demande si vous voulez installer la version du mainteneur du package ou conserver la vôtre.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X