SSH wird beim Neustart auf den Standardport zurückgesetzt

12

Ich habe meinen Standard-SSH-Port auf meinem /etc/ssh/sshd_configHeimserver (in der Datei) in Port 54747 geändert und dann die Dienste sshund neu gestartet sshd(ich bin mir nicht sicher, welchen, also habe ich beide aus Sicherheitsgründen ausgeführt). Um meine Konfiguration zu testen, habe ich mich ohne Probleme abgemeldet und wieder angemeldet.

Ein paar Tage später installierte ich apt updates und startete meinen Server neu. Als ich versuchte, SSH wieder einzurichten (auf Port 54747), wurde mir ein Verbindungsfehler verweigert.

Aus irgendeinem Grund habe ich versucht, SSH auf Standard-Port, und es hat funktioniert! Ich ging zurück, um die sshd_config zu überprüfen, aber sie hatte immer noch den benutzerdefinierten Port. Also habe ich die sshund sshd-Dienste neu gestartet und es kam wieder zu "normalem" Verhalten (ssh auf Port 54747). Ich habe erneut versucht, einen Neustart durchzuführen, und die Verbindung wurde erneut verweigert.

Weiß jemand was ich falsch gemacht habe?

Zusätzliche Details:

  • Ubuntu 16.04.2 LTS
  • Der Server wird auch als HTPC mit einer offenen Sitzung (derselbe Benutzer wie SSH) auf meinem Fernseher verwendet
  • Ich verwende den RSA-Schlüssel meines Laptops für SSH und habe die Kennwortauthentifizierung deaktiviert
  • Früher habe ich einen Neustart durchgeführt sudo reboot -h now, aber nach der Suche stellte ich fest, dass es von einigen Leuten nicht empfohlen wurde, also habe ich es versucht sudo reboot, aber keine Unterschiede

EDIT Reihenfolge der Ereignisse:

  1. Ändern Sie den SSH-Port von 22 auf 54747 Zoll /etc/ssh/sshd_config
  2. Starten Sie die Dienste ssh und sshd neu
  3. Aktuelle SSH-Sitzung beenden
  4. SSH wurde erfolgreich auf Port 54747 zurückgespielt
  5. Starten Sie neu
  6. SSH-Verbindungsfehler an Port 54747, aber erfolgreich an Port 22
  7. Starten Sie die Dienste ssh und sshd neu
  8. SSH wurde erfolgreich an Port 54747 wiederhergestellt, Verbindungsfehler an Port 22
  9. Starten Sie neu und kehren Sie zu 6 zurück

EDIT 1: netstat Ausgabe

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)

Als Referenz ist ATLAS der Hostname des Remoteservers, 192.168.1.27 die LAN-IP meines Laptops, und der Befehl wurde zwischen den Schritten 6 und 7 ausgeführt

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
3rgo
quelle
Ich erniedrige Sie in keiner Weise. Aber für mich sieht es so aus, als würden Sie die Befehle nicht wie gewünscht auf dem SSH-Server eingeben. Sie können keine Live-SSH-Verbindungen haben, wenn der SSH-Dämon tot ist. Auf dem SSH-Server sollte ps -ef | grep sshd den Prozess / usr / sbin / sshd -D zurückgeben. Es gibt mehrere Leute, die helfen, aber Sie in alle Richtungen schicken. Ich freue mich, mit Ihnen über Sofortnachrichten zu chatten, wenn dies für Sie hilfreich wäre.
jones0610
Vielleicht liegt es daran, dass ich bereits eine Sitzung mit demselben Benutzer geöffnet habe, die mit Kodi auf meinem Fernseher angezeigt wird?
3rgo
Hallo, @ 3rgo, hast du es geschafft, das zu lösen?
pa4080
Hallo ! Nein, ich habe immer noch dieses Problem ... Glücklicherweise muss ich meinen Heimserver nicht immer wieder neu starten, aber es ist immer noch ein Schmerz, weil es einige meiner automatisierten Prozesse bricht ...
3.
Ich habe einige Ideen. (1) Sie können versuchen, den Port auf seinen Standardwert zu ändern und dann das gesamte System neu zu starten. Versuchen Sie dann erneut, den gewünschten Wert einzustellen. (2) Versuchen Sie es zum Beispiel mit einem anderen Wert Port 10285. Google zeigt einige Ergebnisse für 54747 ... (3) Auch der SSH-Server kann mit mehreren Ports gleichzeitig arbeiten. Erstellen Sie zwei separate Anweisungen für jeden Port: Port 22und Port 54747öffnen Sie dann nur die zweite in der Firewall. (4) Sie können die Match LocalPortDirektive versuchen , die am Anfang von steht sshd_c.
pa4080

Antworten:

2

ssh kann je nach Konfiguration von systemd "Socket-aktiviert" werden. Dies bedeutet, dass anfangs systemd den Listening-Port einrichtet und sshd nur gestartet wird, wenn ein Client zum ersten Mal eine Verbindung herstellt. Dies beschleunigt die Startzeit: Service-Daemons werden nur bei Bedarf gestartet.

Dies bedeutet jedoch, dass Sie systemd auch für den entsprechenden Port konfigurieren müssen. Die Systemkonfiguration finden Sie in /lib/systemd/system/ssh.socketden Listen ListenStream=22. Um dies zu überschreiben, erstellen Sie eine Datei /etc/systemd/system/ssh.socket.d/port.conf(erstellen Sie ssh.socket.dbei Bedarf das Verzeichnis ), die Folgendes enthält:

[Socket]
ListenStream=
ListenStream=54747

Ändern Sie die Nummer in den gewünschten Anschluss. Der erste leere Eintrag löscht den vorherigen Standard und der folgende Eintrag fügt den neuen hinzu. Dies überschreibt die Standardeinstellung in /lib/systemd/system/ssh.socketund muss zusätzlich zu den Änderungen durchgeführt werden /etc/ssh/sshd_config.

Führen sudo systemctl daemon-reloadSie sudo systemctl reload sshdann den Befehl aus , um systemd über Ihre Änderungen zu informieren und festzustellen , ob Ihr ssh-Daemon zuvor ausgeführt wurde.

Robie Basak
quelle
Diese Antwort sieht sehr vielversprechend, aber /etc/systemd/system/ssh.socket.d/port.confwird immer noch ignoriert und dem Neustart setzt Port 22. ist der Dateiname relevant? Unter Ubuntu kann keine gute Dokumentation zu Systemd-Überschreibungen gefunden werden .
MestreLion
Der Dateiname spielt keine Rolle, solange er auf endet .conf. Weitere Informationen zum Überschreiben von Konfigurationsdateien durch systemd-system.conf (5) .
Robie Basak
Sie können auch ausführen, um systemctl status ssh.socketzu sehen, ob es aktiviert ist und was es abhört.
Robie Basak
2
Das funktioniert!!! Endlich ist dieses Geheimnis gelöst! Aber danach bemerkte ich, dass ich über beide Ports zugreifen konnte : den Standardport 22 und den benutzerdefinierten. Das Hinzufügen einer ListenStream=Leitung vor dem benutzerdefinierten Port verhinderte dies, nicht sicher warum. Vielleicht "löscht" dies die ListenStream=22Einstellung in der Standardeinstellung /lib/systemd/system/ssh.socket? Seltsame Art, Einstellungen zu überschreiben. Vielleicht lohnt es sich, dies zur Antwort hinzuzufügen?
MestreLion
@ MestreLion ah ja, das ist richtig. Ich werde die Antwort aktualisieren. Vielen Dank!
Robie Basak
0

Überprüfen Sie Ihre Porteinstellungen in der /etc/ssh/sshd_configDatei. Stellen Sie sicher, dass Sie als sudo oder als Benutzer in der sudo-Gruppe arbeiten. Alles, was Sie tun müssen, um den Port einzustellen, ist, in einem Leitungstyp Port 54747.Jetzt den ssh-Dienst neu zu starten, indem Sie service sshd restart.ausführen. Vergewissern Sie sich dann, dass ssh diesen Port sudo netstat -lntp | grep ssh.überwacht , indem Sie Reboot ausführen und testen.

Überprüfen Sie auch Ihre Netzwerkeinstellungen. Wenn Sie sich in einem Unternehmensnetzwerk befinden, vergewissern Sie sich, dass Sie sich im richtigen VLAN befinden.

G_Style
quelle
Ich habe ein Backup erstellt, die Datei als sudo bearbeitet und die Standardzeile Port 22auf Port 54747nur geändert . Auch der von Ihnen angegebene Netstat hatte keine Ausgabe. Ich habe ein modifiziertes in mein OP
3rgo am
Sie verbinden sich mit einem Schlüssel richtig? Sie sollten also wie Verbindungs sein: ssh -i key.txt user@ipaddress -p 54747. Überprüfen Sie auch, ob an diesem Port etwas anderes empfangsbereit ist. Tun sudo lsof -i | grep ssh. Sie können auch Ihre Firewall überprüfen, um sicherzustellen, dass sie nichts blockiert. Do: sudo ufw status.
G_Style
Kein Port für 54747 verwendet (siehe mein OP, ich habe es hinzugefügt). Ich
füge auch
Nach einigen weiteren Überlegungen zu Ihrem Problem habe ich das Gefühl, dass dies nicht auf Ihre Einrichtung zurückzuführen ist, sondern auf die Art und Weise, wie Sie neu starten. Beim Neustart sollten Sie den Befehl verwenden shutdown -r now. Probieren Sie es aus und teilen Sie uns die Ergebnisse mit. Siehe diesen Artikel als Referenz: askubuntu.com/questions/483670/…
G_Style
Ich habe gerade versucht, und habe das gleiche Ergebnis wie sudo reboot -h now"Sudo-Neustart"
3rgo
0

Manchmal laufen die Dinge einfach schief. Wenn ich bei dir wäre, würde ich versuchen mit:

cp /etc/ssh/sshd_config $HOME
sudo apt-get --reinstall install openssh-server
pa4080
quelle
Muss ich physisch auf den Server zugreifen? Wenn ja, kann ich es erst morgen Abend tun
3.
Hallo @ 3rgo, ich denke du brauchst keinen physischen Zugang. Ich versuche es einfach auf meinem VPS. Auch auf meinem Heim-Ubuntu-Server, während ich über SSH eingeloggt war. Auch die Verbindung wurde nicht unterbrochen. cpBefehl ist nur für den Fall, in der Regel berührt Neuinstallation Konfigurationsdateien nicht.
pa4080
Hallo! Ich habe versucht, neu zu installieren, aber nichts hat sich geändert, ich habe immer noch das gleiche Problem ...
3rgo
0

ssh ist der Client-Prozess, der eine Benutzersitzungsverbindung zum ssh-Server vermittelt und aufrechterhält. sshd ist der Daemon, der auf dem SSH-Server ausgeführt wird, um SSH-Verbindungsanfragen abzuhören und zu authentifizieren.

Die Konfigurationsdatei auf dem sshd-Server, die beim Starten des sshd-Dienstes gelesen wird (für deren Bearbeitung sudo-Berechtigungen erforderlich sind), lautet

/etc/ssh/sshd_config

Der Dienst sollte aus starten

/etc/systemd/system/sshd.service

Um sshd neu zu starten, müsste die Datei sshd_config erneut gelesen werden

sudo service sshd restart

Um zu sehen, welchen Port der sshd-Daemon abhört, sowie weitere hilfreiche Informationen zum Typ des ssh-Servers

sudo service sshd status

Führen Sie diese Schritte in der angegebenen Reihenfolge aus:

Starten Sie den SSH-Server neu

Öffnen Sie eine Terminalsitzung auf dem SSH-Server (keine SSH-Verbindung)

Art hostname

Wenn der Hostname den Namen des SSH-Servers (in diesem Fall Atlas) nicht zurückgibt, wiederholen Sie den vorherigen Schritt korrekt.

grep Port /etc/ssh/sshd_config - Notieren Sie die Portnummer. Sollte der sein, den Sie angegeben haben

sudo service sshd status

Wenn der Status angibt, dass er aktiv ist und den von Ihnen angegebenen benutzerdefinierten Port ausführt und überwacht, sind Sie in diesem Punkt gut aufgehoben. Andernfalls ruft der Dienststart möglicherweise nicht die von Ihnen geänderte Datei sshd_config auf, sondern eine andere Konfigurationsdatei, die Standardinformationen enthält. Wenn der Dienst nicht gestartet wurde ("tot" und nicht aktiv und läuft "), ist dies ein anderes Problem als das, worüber Sie gefragt haben.

Diese Schritte identifizieren wahrscheinlich die Grundursache des Problems, nach dem Sie fragen.

Zu Testzwecken und zur Vereinfachung: Auf der Clientseite würden Sie von einer Terminalsitzung aus wie folgt ssh auf den ssh-Server übertragen

ssh -l username -p 54747 hostname

Aufgrund des OP-Feedbacks vermute ich, dass sshd beim Booten nicht startet, aber beim manuellen Aufrufen korrekt startet. Erfolgreiche SSH-Verbindungen über Port 22 können durchaus NICHT mit dem SSH-Server verbunden sein, sondern mit etwas anderem (z. B. localhost). Um dies zu beweisen oder zu entlarven, geben Sie nach dem Herstellen einer Verbindung über ssh Folgendes ein

hostname

Basierend auf dem, was OP sagt, wird der Hostname vermutlich nicht der SSH-Server-Atlas sein.

Um dies weiter zu isolieren, müssen Sie nach dem Neustart des SSH-Servers, bevor Sie weitere Schritte ausführen , eine Terminalsitzung auf dem SSH-Server (Atlas) durchführen

ssh localhost

Wenn dies fehlschlägt, wie es sollte, dann

ssh -p 54747 localhost

Wenn dies auch nicht funktioniert, werden die beim Ausführen erzielten Ergebnisse bestätigt

sudo service sshd status
jones0610
quelle
Hallo ! Ich habe eine Abfolge von Ereignissen hinzugefügt, damit Sie diese besser verstehen können. Ich SSH mit dem Befehl ssh -p <PORT> <USER>@<IP>, mit meinem privaten Schlüssel zum Agenten hinzugefügt.
3.
Sehr gut. Führen Sie Schritt 6a aus: Auf dem SSHD-Server Sudo-Dienst-SSHD-Status. Wenn Port 22 gemeldet wird, wird eine gefälschte sshd_config-Datei aufgerufen.
jones0610
Sagt, "inaktiv (tot)" (siehe volle Ausgabe in meinem OP in einer Sekunde)
3rgo
Wenn es also tot ist (nicht aktiv und läuft), stürzt du dich nicht in die Maschine, von der du denkst, dass du sie bist. Geben Sie auf dem SSHD-Server ps -ef | grep sshd ein. Wenn der sshd-Daemon auf dem sshd-Server tatsächlich tot ist, werden keine sshd-Prozesse ausgeführt, und Sie können unabhängig vom verwendeten Port kein ssh ausführen.
jones0610
2 sshd Prozesse gefunden ... Ich habe detaillierte Ausgabe hinzugefügt
3rgo
0

Wahrscheinlich haben Sie gerade mit Y geantwortet, als apt Unterschiede zwischen Ihrer sshd_config und der des Pakets feststellte. Sie werden gefragt, ob Sie die Version des Paket-Mantainers installieren oder behalten möchten.

Marco
quelle
1
Ich erinnere mich nicht, dass ich so etwas gefragt bekommen habe, aber wenn es der Fall ist, was kann ich tun, um es zu beheben?
3.
0

Mögliche Ursachen, an die ich denken kann

  1. Eine andere sshd-Binärdatei wird beim Booten gestartet oder sshd wird mit einer anderen Konfiguration gestartet. Vielleicht ist hier systemd der Schuldige - es gibt eine andere Möglichkeit, den Port über die Datei zu ändern /usr/lib/systemd/system/sshd.socket: https://www.vultr.com/docs/how-to-change-ssh-port-on-coreos
  2. Die richtige / etc / oder / etc / ssh ist noch nicht gemountet, wenn sshd gestartet wird. Ist es ein separates Volume auf Ihrem Computer, das später im Bootprozess gemountet wird?
  3. sshd fehlen beim booten die leserechte für die config-datei, obwohl ich nicht weiß, ob sshd dann überhaupt starten würde.
Jay
quelle
2
Ich schätze, du bist drauf. Und wenn es sich um einen Server handelt, der viele Upgrades durchlaufen hat, gibt es vielleicht einen Cocktail von Startskripten (sysv-init, upstart, systemd). Vielleicht eine einfache Suche und Überprüfung aller Dateien in / etc / find /etc/ -iname "*ssh*", um nach weiteren Hinweisen zu suchen.
Bazz