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


12

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

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

Pour une raison quelconque, j'ai essayé de SSH sur le port par défaut, et cela a fonctionné! Je suis retourné vérifier le sshd_config, mais il avait toujours le port personnalisé. J'ai donc redémarré les services sshet sshd, et il est revenu à un comportement "normal" (ssh sur le port 54747). J'ai essayé de redémarrer à nouveau et la connexion a de nouveau refusé ...

Quelqu'un sait ce que j'ai fait de mal?

Détails supplémentaires:

  • Ubuntu 16.04.2 LTS
  • Le serveur utilise également un HTPC, avec une session ouverte (même utilisateur que SSH) sur mon téléviseur
  • Je SSH en utilisant la clé RSA de mon ordinateur portable et j'ai désactivé l'authentification par mot de passe
  • J'avais l'habitude de redémarrer avec sudo reboot -h now, mais après avoir cherché, j'ai découvert qu'il était découragé par certaines personnes, j'ai donc essayé sudo reboot, mais aucune différence

MODIFIER la séquence des événements:

  1. Changer le port SSH de 22 à 54747 en /etc/ssh/sshd_config
  2. Redémarrez les services ssh et sshd
  3. Mettre fin à la session SSH en cours
  4. SSH de retour avec succès sur le port 54747
  5. Redémarrer
  6. Erreur de connexion SSH sur le port 54747, mais réussie sur le port 22
  7. Redémarrez les services ssh et sshd
  8. SSH de retour avec succès sur le port 54747, erreur de connexion sur le port 22
  9. Redémarrez et revenez à 6

EDIT 1: netstat sortie

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

EDIT 2: service sshd status

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

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: inactive

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

Je ne vous dénigre en aucune façon. Mais il me semble que vous n'entrez pas les commandes sur le serveur ssh comme demandé. Vous ne pouvez pas avoir de connexions ssh en direct lorsque le démon ssh est mort ....... sur le serveur ssh, ps -ef | grep sshd devrait retourner le processus / usr / sbin / sshd -D. Il y a plusieurs personnes qui aident mais vous envoient dans toutes les directions. Je suis heureux de discuter avec vous sur IM si cela peut vous être utile.
jones0610

C'est peut-être parce que j'ai déjà une session avec le même utilisateur ouverte et affichée sur mon téléviseur avec Kodi?
3rgo

Bonjour, @ 3rgo, avez-vous réussi à résoudre ce problème?
pa4080

Salut ! Non, je rencontre toujours ce problème ... Heureusement, je n'ai pas à redémarrer mon serveur domestique de temps en temps, mais c'est toujours une douleur, car cela casse certains de mes processus automatisés ...
3rgo

J'ai quelques idées. (1) Vous pouvez essayer de redonner au port sa valeur par défaut, puis redémarrer l'ensemble du système. Essayez ensuite de le modifier à nouveau à la valeur souhaitée. (2) Essayez avec une valeur différente, par exemple Port 10285. Google affiche quelques résultats pour 54747 ... (3) Le serveur SSH peut également fonctionner avec plusieurs ports simultanément. Créez deux directives distinctes pour chaque port: Port 22puis Port 54747, ouvrez uniquement la seconde dans le pare-feu. (4) Vous pouvez essayer la Match LocalPortdirective , placée au début de sshd_c.
pa4080

Réponses:


2

ssh peut être "activé par socket" par systemd en fonction de 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 lorsqu'un client se connecte pour la première fois. C'est pour 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 sur le port correspondant. Vous trouverez la configuration du système dans /lib/systemd/system/ssh.socketlaquelle les listes ListenStream=22. Pour remplacer cela, créez un fichier /etc/systemd/system/ssh.socket.d/port.conf(créant le répertoire ssh.socket.dsi nécessaire) qui contient:

[Socket]
ListenStream=
ListenStream=54747

Modifiez le numéro sur le port souhaité. La première entrée vide efface la valeur par défaut précédente, et l'entrée suivante ajoute la nouvelle. Cela annule la livraison par défaut /lib/systemd/system/ssh.socketet doit être effectué en plus de la modification /etc/ssh/sshd_config.

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


Cette réponse semble très prometteuse, mais /etc/systemd/system/ssh.socket.d/port.confest ignorée et le redémarrage réinitialise toujours le port à 22. Le nom de fichier est-il pertinent? Impossible de trouver une bonne documentation sur les remplacements de systemd sur Ubuntu .
MestreLion

Le nom du fichier n'a pas d'importance tant qu'il se termine .conf. Voir systemd-system.conf (5) pour plus de détails sur les fichiers de configuration de remplacement de systemd.
Robie Basak

Vous pouvez également exécuter systemctl status ssh.socketpour voir s'il est activé et ce qu'il écoute.
Robie Basak

2
Cela marche!!! Enfin ce mystère est résolu! Mais après, j'ai remarqué que je pouvais accéder en utilisant les deux ports: le 22 par défaut et le personnalisé. L'ajout d'une ListenStream=ligne avant le port personnalisé a empêché cela, je ne sais pas pourquoi. Peut-être que cela "efface" le ListenStream=22paramètre par défaut /lib/systemd/system/ssh.socket? Façon étrange de remplacer les paramètres. Peut-être la peine d'ajouter cela à la réponse?
MestreLion

@MestreLion ah oui, c'est exact. Je mettrai à jour la réponse. Merci!
Robie Basak

0

Vérifiez vos paramètres de port dans le /etc/ssh/sshd_configfichier. Assurez-vous que vous modifiez en tant que sudo ou utilisateur du groupe sudo. Tout ce que vous avez à faire pour définir le port est, sur un type de ligne 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.Reboot et test.

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


J'ai fait une sauvegarde et édité le fichier en tant que sudo, et changé la Port 22ligne par défaut en Port 54747seulement. De plus, le netstat que vous m'avez donné n'avait pas de sortie. J'en ai ajouté un modifié dans mon OP
3rgo

Vous vous connectez avec une clé correcte? Donc , vous devriez être en connexion comme: ssh -i key.txt user@ipaddress -p 54747. Vérifiez également si autre chose écoute sur ce port. Faites sudo lsof -i | grep ssh. Vous pouvez également vérifier votre pare-feu pour vous assurer qu'il ne bloque rien. Faites: sudo ufw status.
G_Style

Aucun port utilisé sur 54747 (voir mon OP, je l'ai ajouté). J'y ajoute aussi la sortie de vos commandes
3rgo

Après un peu plus de réflexion sur votre problème, j'ai le sentiment que ce n'est pas votre configuration, mais la façon dont vous redémarrez, qui est à l'origine de ce problème que vous rencontrez. Lorsque vous redémarrez, vous devez utiliser la commande shutdown -r now. Essayez-le et faites-nous connaître les résultats. Voir cet article pour référence: askubuntu.com/questions/483670/…
G_Style

Je viens d'essayer, et j'ai obtenu le même résultat que sudo reboot -h nowou `sudo reboot ''
3rgo

0

Parfois, les choses tournent mal. Si j'étais chez toi, j'essaierais avec:

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

Me faudra-t-il accéder physiquement au serveur? Si c'est le cas, je ne peux le faire que demain soir
3rgo

Salut @ 3rgo, je pense que vous n'avez pas besoin d'un accès physique. Je viens de l'essayer sur mon VPS. Également sur mon serveur Ubuntu domestique, alors que j'étais connecté via SSH. Même la connexion n'a pas été interrompue. cpla commande est juste au cas où, le processus de réinstallation ne touche généralement pas les fichiers de configuration.
pa4080

Salut! J'ai essayé de réinstaller, mais rien n'a changé, j'ai toujours le même problème ...
3rgo

0

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 le modifier) ​​est

/etc/ssh/sshd_config

Le service doit démarrer

/etc/systemd/system/sshd.service

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

sudo service sshd restart

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

sudo service sshd status

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

Redémarrez le serveur ssh

Ouvrez une session de terminal sur le serveur ssh (pas une connexion ssh dedans)

Type hostname

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

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

sudo service sshd status

Si le statut indique qu'il est actif, en cours d'exécution et à l'écoute sur le port personnalisé que vous avez spécifié, alors vous êtes bon à cette fin. Sinon, il se peut que le démarrage du service n'appelle pas 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é (dit mort et non actif et en cours d'exécution, alors c'est un problème différent de ce que vous avez demandé.

Ces étapes identifieront probablement la cause première du problème que vous posez.

À des fins de test et pour des raisons de simplicité: Du côté client, à partir d'une session de terminal, vous devez ssh dans le serveur ssh comme suit

ssh -l username -p 54747 hostname

Sur la base des commentaires OP, je soupçonne que sshd ne démarre pas au démarrage mais démarre correctement lorsqu'il est appelé manuellement. Les connexions ssh réussies via le port 22 peuvent ne PAS se connecter au serveur ssh mais à autre chose (par exemple localhost). Pour prouver ou démystifier cela, après la connexion via le type ssh

hostname

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

Pour isoler davantage cela, après le redémarrage du serveur ssh mais avant de faire quoi que ce soit de plus , à partir d'une session de terminal sur le type de serveur ssh (Atlas)

ssh localhost

Si cela échoue, comme il se doit, alors

ssh -p 54747 localhost

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

sudo service sshd status

Salut ! J'ai ajouté une séquence d'événements pour que vous puissiez mieux comprendre. Je SSH en utilisant la commande ssh -p <PORT> <USER>@<IP>, avec ma clé privée ajoutée à l'agent.
3rgo

Très bien. Effectuez l'étape 6a: sur le serveur sshd, état sshd du service sudo. S'il signale le port 22, un faux fichier sshd_config est appelé.
jones0610

Dit, "inactif (mort)" (voir la sortie complète dans mon OP en une seconde)
3rgo

Donc, s'il est mort (non actif et en cours d'exécution), vous n'entrez pas dans la machine que vous pensez être. Sur le serveur sshd, tapez ps -ef | grep sshd. Si le démon sshd sur le serveur sshd est réellement mort, aucun processus sshd ne sera en cours d'exécution et vous n'aurez donc pas la possibilité de le faire ssh quel que soit le port utilisé.
jones0610

2 processus sshd trouvés ... J'ai ajouté une sortie détaillée
3rgo

0

Vous venez probablement de répondre Y quand apt a détecté des différences entre votre sshd_config et celui de votre package. Il vous demande si vous souhaitez installer la version de mantainer du package ou conserver la vôtre.


1
Je ne me souviens pas qu'on m'ait posé une telle question, mais en supposant que ce soit le cas, que puis-je faire pour y remédier?
3rgo

0

Causes possibles auxquelles je peux penser

  1. Un binaire sshd différent est démarré au démarrage ou sshd est démarré avec une configuration différente. Peut-être que systemd est le coupable ici - il a une manière différente de changer de port, via un fichier /usr/lib/systemd/system/sshd.socketapparemment: https://www.vultr.com/docs/how-to-change-ssh-port-on-coreos
  2. Le fichier / etc / ou / etc / ssh correct n'est pas encore monté au démarrage de sshd, s'agit-il d'un volume distinct sur votre machine qui sera monté plus tard dans le processus de démarrage?
  3. sshd manque d'autorisations de lecture sur le fichier de configuration au moment du démarrage, bien que je ne sais pas si sshd commencerait même alors.

2
Je suppose que vous y êtes. Et s'il s'agit d'un serveur qui a subi de nombreuses mises à niveau, il y a peut-être un cocktail de scripts de démarrage (sysv-init, upstart, systemd) Peut-être une simple recherche et vérifier tous les fichiers dans / etc / find /etc/ -iname "*ssh*"pour rechercher plus d'indices.
Bazz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.