Was verursacht SSH-Probleme nach dem Neustart eines 14.04-Servers?

15

Warum erhalte ich beim Neustart eines Servers mit Ubuntu 14.04 die Fehlermeldung "Verbindung abgelehnt"?

Ich sehe das ssh: connect to host <IP-address-here> port 22: Connection refusedaber erst für 14.04 und erst nach einem Neustart. Ich verwende 12.04 Desktop zu Hause. Wie behebe ich das?


Um die Frage klarer zu machen, hier ist, was für mich funktioniert oder nicht:

  • SSH in eine Neuinstallation von 12.04> ausloggen> SSH wieder einspielen> funktioniert
  • SSH in eine Neuinstallation von 12.04> Neustart> SSH erneut einspielen> funktioniert
  • SSH in eine Neuinstallation von 14.04> ausloggen> SSH wieder einspielen> funktioniert
  • SSH in eine Neuinstallation von 14.04> Neustart> SSH erneut einspielen> Verbindung abgelehnt

Das Problem, das ich habe, ist einzigartig für 14.04 und tritt erst nach einem Neustart auf. Ich habe mehrere Server, auf denen vorher 12.04 ausgeführt wurde, und alles funktioniert noch einwandfrei. Ich habe einen neuen Server, auf dem ich 14.04 verwenden möchte, und ich möchte verstehen, was falsch läuft. Irgendwelche Vorschläge?


Folgendes habe ich bisher versucht:

sudo traceroute -p 22 -T <IP-address-here>

Traceroute funktioniert einwandfrei. Ich erhalte eine Antwort vom Server auf SSH-Port 22.

initctl list
...
ssh start/running, process 23371
...

Sieht so aus, als ob ssh auf dem 14.04-Server so eingestellt ist, dass es beim Booten startet (wie erwartet).

tom@Desktop:~$ ssh -vvv root@<IP-address-here>
OpenSSH_5.9p1 Debian-5ubuntu1.4, OpenSSL 1.0.1 14 Mar 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to <IP-address-here> [<IP-address-here>] port 22.
debug1: connect to address <IP-address-here> port 22: Connection refused
ssh: connect to host <IP-address-here> port 22: Connection refused

Bearbeiten: Hier ist das gesamte Syslog von einem frisch erstellten Rechner . Ich habe es erstellt, SSH wurde in & reboot nowBefehl ausgegeben , dann wurde ein Verbindungsfehler zurückgewiesen, nachdem ich darauf gewartet hatte, dass es neu gestartet und beim zweiten Mal versucht hat, SSH zu starten . Fester Neustart über das Hosting Control Panel und jetzt funktioniert die SSH-Verbindung wieder.

Tom Brossman
quelle
Ich habe ein ähnliches Problem, aber in einem ganz anderen Kontext. Es scheint, dass sich etwas geändert hat, aber ich kann nicht herausfinden, was. Ich weiß, dass es Änderungen bei udev gibt, aber ich sehe nicht genau, wie es darauf ankommt, da die Vernetzung ansonsten ordnungsgemäß zu funktionieren scheint. Nur sshd ist mühsam.
Jo-Erlend Schinstad
1
@ Jo-ErlendSchinstad Ich habe heute 2 Stunden damit verbracht, dies mit AWS-, DigitalOcean- und OVH-Servern zu testen und kann es 100% der Zeit reproduzieren. 12.04 = ok, 14.04 = kein SSH nach dem Neustart. Wenn dies ein Fehler wäre, würden wir wahrscheinlich von vielen anderen hören, deren Server gesperrt sind! Ich hoffe, dass ich etwas übersehen habe, aber mit einer Neuinstallation + einmaligem SSH-Login zum Neustart ist hier nicht viel Platz für menschliches Versagen. Habe es gerade von meinem 14.04 Laptop aus getestet (falls dies eine 12.04 Sache war) und keine Änderung, gleiches Ergebnis. Ich hoffe wirklich, dass ich das bald herausfinden kann ...
Tom Brossman
1
Oh, ich habe viele Server, auf denen sshd überhaupt ohne Probleme ausgeführt wird. Dies ist das Problem, auf das ich mich bezog: askubuntu.com/questions/479448/…
Jo-Erlend Schinstad

Antworten:

17

Schnelle Antwort:

SSH ist nicht das Problem. Der Befehl, den Sie zum Neustarten verwenden, ist das Problem: Tun Sie nichts, tun Sie reboot nownichts rebootoder shutdown -r nowstarten Sie Ihr System neu.

Die Befehlssyntax ( seit 13.04 ) lautete :

reboot [OPTION]...  [REBOOTCOMMAND]

Das gab es noch REBOOTCOMMANDnie. In 12.04 wurde Ihr nownur ignoriert, aber jetzt wird es benutzt ... und es zerstört alles.

Lange Antwort mit meinen Testergebnissen und Erklärung:

Ich habe ein ähnliches Problem mit einigen Servern, auf denen 14.04 AND in VPS (gehostet beim französischen OVH-Anbieter - OpenVZ) AND ausgeführt wird, wenn reboot nowder Server selbst ausgeführt wird.

Wie Sie habe ich den Befehl reboot nowüber die Konsole ausgegeben (mit SSH angemeldet). Einige Sekunden nachdem ich gedrückt habe RETURN, wird meine Sitzung automatisch getrennt. Wie Sie konnte ich nach der Ausgabe dieses Befehls noch nie wieder über SSH eine Verbindung zum Server herstellen.

Deshalb habe ich mich entschlossen, die von OVH bereitgestellte KVM-Konsole zu öffnen. (Emulieren des direkten Zugriffs über Tastatur und Bildschirm auf einem physischen Server für diese Art von virtuellem Server).

Ich konnte eine Verbindung zu meinem Computer herstellen und sah, dass sie in den Einzelbenutzermodus wechselte und darauf wartete, dass ich CTRL+ drückte, Dum fortzufahren, oder das root-Passwort eingab, um in den Wartungsmodus zu wechseln. Ich drückte die Tastenkombination, um den Vorgang fortzusetzen, und konnte dann erneut SSH auf meinem System ausführen. Was war meine Überraschung, als ich nach dem Laufen feststellte uptime, dass die Betriebszeit nicht 2 oder 3 Minuten betrug, aber dennoch viel Zeit in Anspruch nahm : Die reboot nowAusführung in einem Ubuntu 14.04 VPS ist kein wirklicher Neustart, sondern verlangt nur, in den Einzelbenutzermodus zu wechseln!

Aus diesem Grund habe ich gelernt, in meinem VPS niemals einen Neustart anzufordern, sondern ihn über den Befehl anzufordern, der auf der Verwaltungsoberfläche des Hosters bereitgestellt wird.

Somit gibt es kein Problem mit Ihrer SSH-Installation. Das Problem ist, wenn Sie tippen reboot now. Tatsächlich habe ich es später auch getestet, wenn Sie reboot(nur das Wort, keine Option) eingegeben hätten, hätte es getan, was Sie vorhatten: Starten Sie den Server neu.

Verwenden Sie rebootmit einem Argument (von der Manpage), rufen Sie den Befehl shutdownmit den angegebenen Argumenten auf. Und in der Tat habe ich bei der Ausführung shutdown nowdas gleiche Verhalten: Das System wird nicht neu gestartet, sondern in den Einzelbenutzermodus versetzt.

Anmerkung: Es sieht so aus, als ob dies das beabsichtigte Verhalten ist, da die Meldung, die auf dem Bildschirm angezeigt wird, nachdem Sie diesen Befehl ausgeführt haben, etwa Folgendes sagt:

Das System wird in den Wartungsmodus versetzt

Wartungsmodus oder Einzelbenutzermodus, dies ist dasselbe, ein Runlevel mit mehr als einer Shell, keinem Netzwerk, keinen Netzwerkprozessen, ...

Dies kann verwirrend sein. Beachten Sie jedoch, dass die korrekte Verwendung shutdownbeispielsweise shutdown -h nowdarin besteht, das System jetzt shutdown -r nowanzuhalten oder es jetzt neu zu starten. Mir war nicht bewusst, dass shutdown nowdas System nur in den Einzelbenutzermodus versetzt werden würde. Normalerweise mache ich das init S, um das zu erreichen.

Benoit
quelle
Vielen Dank für diese sehr interessante Antwort! Ich werde das alles jetzt testen, da ich auf einem dedizierten Server (kein VPS) bin, aber ich hatte das Problem auf beiden Typen - solange es 14.04 und nicht 12.04 war. sudo reboot nowfunktioniert einwandfrei in 12.04 und uptimeentspricht dem letzten mal das ich es mache. Sehr interessante Änderung für den 14.04.
Tom Brossman
1
Wenn Sie nach dem Update des Servers auf 14.04.1 genau dasselbe Problem haben und einen Neustart durchführen, wird das Problem nicht behoben.
Chhantyal
Das hat es für mich behoben. Musste den Server manuell neu starten. Wow, das ist super nervig! Warum um alles in der Welt würde das jetzt dem Einzelbenutzermodus entsprechen? Was für eine dumme Wahl. Warum nicht sudo reboot --single-userdiese Funktionalität bekommen ???
jcollum
2

Ich komme vielleicht zu spät, und es mag offensichtlich sein, aber was für mich funktioniert hat, war die Überprüfung der Konfigurationsdatei /etc/ssh/sshd_config: Das Ausführen des Dämons mit /etc/init.d/ssh startoder einer anderen Kombination hat gezeigt, dass der Dienst ausgeführt wurde, obwohl dies nicht der Fall war, aber wenn ich die ausführbare Datei mit starte sein absoluter Pfad (in meinem Fall /usr/sbin/sshd) Ich habe gesehen, dass am Ende der Konfigurationsdatei ein "0B" angehängt wurde, das beim Starten einen Fehler verursachte. Das Entfernen löste das Problem.

Tama
quelle
Sehr nützlich - in meinem Fall hatte ich am Anfang der Datei ein fehlerhaftes Zeichen eingegeben. Sehr mysteriös, wie kein Fehler ausgegeben wird, wenn ein Problem in der Konfiguration vorliegt und alles zu starten scheint, obwohl kein Prozess ausgeführt wird.
Andrew Mao
2

Eine weitere mögliche Ursache ist der ufwVerlust der SSH-Portregelkonfiguration. Dies ist mir mindestens ein oder zwei Mal aufgefallen, als die Firewall-Konfiguration nach dem Anwenden von Updates und dem Neustart den Zugriff auf den Server blockierte. Durch die Verwendung der VPS-Konsolenfunktion meines Hosting-Providers konnte ich auf den Computer zugreifen und das Problem diagnostizieren. Das folgende Beispiel zeigt das Problem (dh kein Eintrag für Port 22):

user@host:~$ sudo ufw status verbose
[sudo] password for user:
Status: active
Logging: on (low)
    Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
80,443/tcp (Nginx Full)    ALLOW IN    Anywhere
25/tcp                     ALLOW IN    Anywhere
143                        ALLOW IN    Anywhere
110                        ALLOW IN    Anywhere
993/tcp (Dovecot Secure IMAP) ALLOW IN    Anywhere
995/tcp (Dovecot Secure POP3) ALLOW IN    Anywhere
25/tcp (Postfix)           ALLOW IN    Anywhere
465/tcp (Postfix SMTPS)    ALLOW IN    Anywhere
80,443/tcp (Nginx Full (v6)) ALLOW IN    Anywhere (v6)
25/tcp (v6)                ALLOW IN    Anywhere (v6)
143 (v6)                   ALLOW IN    Anywhere (v6)
110 (v6)                   ALLOW IN    Anywhere (v6)
993/tcp (Dovecot Secure IMAP (v6)) ALLOW IN    Anywhere (v6)
995/tcp (Dovecot Secure POP3 (v6)) ALLOW IN    Anywhere (v6)
25/tcp (Postfix (v6))      ALLOW IN    Anywhere (v6)
465/tcp (Postfix SMTPS (v6)) ALLOW IN    Anywhere (v6)

Um den Port wieder zu aktivieren, gehen Sie wie folgt vor:

user@host:~$ sudo ufw allow ssh
Rule added
Rule added (v6)
John Rix
quelle
-1

Für mein System bestand das Problem darin, dass das ssh init-Skript /etc/init.d/sshdas einzige war, das auf das Vorhandensein der Upstart-Version von init prüfte.

Fängt /etc/init.d/sshalso nicht an, ssh,weil es glaubt, dass es von gestartet wird upstart.

In meinem Fall startet Upstart aufgrund meiner speziellen Konfiguration nicht:

Es gab eine korrekte Konfiguration in /etc/init/ssh.conf, aber es gab auch eine /etc/init/ssh.overrideDatei manual, die enthielt , was bedeutet, dass ssherwartet wird, dass sie manuell gestartet wird.

Diese Datei wurde vom get-remnux.shInstallationsskript erstellt.

Durch manuelles Starten oder Entfernen der /etc/init/ssh.overrideDatei wird das Problem behoben.

Michal Ambroz
quelle