web-dev-qa-db-fra.com

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

J'ai remplacé mon port SSH par défaut sur mon serveur domestique (dans le fichier /etc/ssh/sshd_config) par le port 54747, puis j'ai redémarré les services ssh et sshd (jamais fais attention). Pour tester ma configuration, je me suis déconnecté puis je suis rentré sans problème.

Quelques jours plus tard, j'ai installé apt updates, puis redémarré mon serveur. Lorsque j'ai essayé de revenir en SSH (sur le port 54747), une erreur de connexion a été 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 sshd_config, mais il avait toujours le port personnalisé. J'ai donc redémarré les services sshet sshd, et il est revenu au comportement "normal" (ssh sur le port 54747). J'ai essayé de redémarrer à nouveau et la connexion a de nouveau été refusée ...

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

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 mon téléviseur
  • J'utilise SSH avec la clé RSA de mon ordinateur portable et je désactive l'autorisation de mot de passe.
  • J'avais l'habitude de redémarrer avec Sudo reboot -h now, mais après une recherche, j'ai découvert qu'il était découragé par certaines personnes, alors j'ai essayé Sudo reboot, mais aucune différence

EDIT Séquence d'événements:

  1. Modifier le port SSH de 22 à 54747 dans /etc/ssh/sshd_config
  2. Redémarrez les services ssh et sshd
  3. Terminer la session SSH en cours
  4. SSH de retour avec succès sur le port 54747
  5. Redémarrage
  6. Erreur de connexion SSH sur le port 54747, mais succès 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'adresse IP du réseau local 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
12
3rgo

sd peut être "socket activé" par systemd en fonction de la configuration, ce qui signifie qu’à l’origine, c’est systemd qui configure le port d’écoute, et sshd n’est démarré que lors de la première connexion du client. Cela accélère 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.socket qui répertorie ListenStream=22. Pour le remplacer, créez un fichier /etc/systemd/system/ssh.socket.d/port.conf (créant le répertoire ssh.socket.d si nécessaire) contenant:

[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. Ceci remplace la valeur par défaut livrée dans /lib/systemd/system/ssh.socket et doit être effectué 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 en cours d'exécution.

2
Robie Basak

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 la modification des privilèges Sudo) est

/etc/ssh/sshd_config

Le service devrait commencer à 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 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)

Type hostname

Si nomhôte ne renvoie pas le nom du serveur ssh (Atlas dans ce cas), recommencez 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 le statut indique qu'il est actif, en cours d'exécution et à l'écoute sur le port personnalisé que vous avez spécifié, vous vous en sortez bien. Sinon, 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, le problème est différent de celui sur lequel vous avez posé la question.

Ces étapes permettront probablement d'identifier la cause première du problème que vous demandez.

Pour des raisons de test et de simplicité: Du côté client, à partir d’une session de terminal, vous devez ssh sur le serveur ssh comme suit:

ssh -l username -p 54747 hostname

Sur la base des commentaires de l'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 risquent de ne PAS se connecter au serveur ssh mais à quelque chose d'autre (par exemple, localhost). Pour le prouver ou le démystifier, après la connexion via le type ssh

hostname

D'après ce que dit OP, je suppose que hostname ne sera pas l'atlas du serveur ssh.

Pour isoler davantage ceci, après avoir redémarré le serveur ssh mais avant de poursuivre , d’une session de terminal sur le serveur ssh ( Atlas) type

ssh localhost

Si cela échoue, comme il se doit, alors

ssh -p 54747 localhost

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

Sudo service sshd status
0
jones0610

Causes possibles auxquelles je peux penser

  1. Un autre fichier binaire sshd est démarré à l’amorçage ou sshd avec une configuration différente. Peut-être que systemd est le coupable ici - il a une façon différente de changer de port, via le fichier /usr/lib/systemd/system/sshd.socket apparemment: 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 séparé sur votre ordinateur qui sera monté plus tard au cours du processus de démarrage?
  3. sshd ne dispose pas des autorisations de lecture sur le fichier de configuration au démarrage, bien que je ne sache pas si sshd pourrait même démarrer du tout.
0
Jay

Vérifiez vos paramètres de port dans le fichier /etc/ssh/sshd_config. Assurez-vous d’éditer en tant que Sudo ou en tant qu’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. puis 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.

0
G_Style

Parfois, les choses tournent mal. Si j'étais à votre place, j'essaierais avec:

cp /etc/ssh/sshd_config $HOME
Sudo apt-get --reinstall install openssh-server
0
pa4080

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

0
Marco