ssh_exchange_identification: Verbindung vom Remote-Host getrennt (hosts.deny wird nicht verwendet)

74

Ich benutze nichthosts.allow oder hosts.deny, außerdem funktioniert SSH von meiner Windows-Maschine (gleicher Laptop, andere Festplatte), aber nicht von meiner Linux-Maschine.

ssh -vvv root@host -p port gibt:

OpenSSH_6.6, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to host [host] port <port>.
debug1: Connection established.
debug1: identity file /home/torxed/.ssh/id_dsa type -1
debug1: identity file /home/torxed/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6
ssh_exchange_identification: read: Connection reset by peer

Auf dem Windows-Computer funktioniert alles einwandfrei, daher habe ich die Sicherheitsprotokolle überprüft und die Zeilen darin sind identisch. Der Server behandelt die beiden verschiedenen "Computer" nicht unterschiedlich und beide sind über die Public-Key-Authentifizierung zulässig.

Das lässt den Schluss zu, dass dies ein Problem mit meinem lokalen ArchLinux-Laptop sein muss. Aber was?

[torxed@archie ~]$ cat .ssh/known_hosts 
[torxed@archie ~]$ 

Das ist also nicht das Problem ..

[torxed@archie ~]$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Keine Konflikte mit den Firewall-Einstellungen (vorerst).

[torxed@archie ~]$ ls -la .ssh/
total 20
drwx------  2 torxed users 4096 Sep  3  2013 .
drwx------ 51 torxed users 4096 May 11 11:11 ..
-rw-------  1 torxed users 1679 Sep  3  2013 id_rsa
-rw-r--r--  1 torxed users  403 Sep  3  2013 id_rsa.pub
-rw-r--r--  1 torxed users  170 May 11 11:21 known_hosts

Die Berechtigungen scheinen in Ordnung zu sein (dieselben auf dem Server). Es wurde auch versucht, ohne /etc/ssh/ssh_configdasselbe Ergebnis zu konfigurieren, mit Ausnahme vieler automatischer Konfigurationsvorgänge auf dem Client, bei denen derselbe Fehler auftritt.

Torxed
quelle
Bitte geben Sie die Ausgabe von an iptables-save|grep -v '^#', die die anderen Tabellen enthält (zB natund mangle). Wenn sie leer sind, geben Sie das einfach an. Ihre iptablesAusgabe oben ist standardmäßig auf die filterTabelle beschränkt. Führen Sie auf dem SSH-Server auch SSH auf einem alternativen Port wie diesem aus und geben Sie die Debug-Ausgabe aus.
0xC0000022L
@ 0xC0000022L gist.github.com/Torxed/d7a5a556c527ffbb609d und gist.github.com/Torxed/1fd9b5b0c276629caf30. In Bezug auf die Firewall funktioniert SSH für mein Windows-Laufwerk (wieder dasselbe Notebook, Mac und IP), aber nicht für meine Linux-Festplatte.
Torxed
zwei weitere Dinge. Sie müssen eine Verbindung zur Instanz über den alternativen Port herstellen. Andernfalls können Sie mögliche Probleme nicht erkennen. Wenn es um Windows oder Linux geht, verwendet einer von ihnen möglicherweise IPv6 ( ip6tables-save)?
0xC0000022L
@ 0xC0000022L Es tut mir sehr leid. Ich habe eine Verbindung mit der falschen IP hergestellt. Beim Ausführen von SSH auf Port 8080 wurde dieses Problem beim
Herstellen
1
Dies passierte mir zeitweise, als mein Server von einem zufälligen Angreifer getroffen wurde, der versuchte, sshd mit Brute-Force zu erzwingen. Behebung durch Hinzufügen von Firewall-Regeln zum Trennen von Verbindungen vom Angreifer.
Andrew Hows

Antworten:

60

Wenn Sie "externe" Faktoren ausgeschlossen haben, können Sie diese mit den folgenden Schritten eingrenzen. Dies beantwortet Ihre Frage zwar nicht direkt, kann jedoch dazu beitragen, die Fehlerursache aufzuspüren.

Fehlerbehebung sshd

Was ich in solchen Fällen im Allgemeinen sehr nützlich finde, ist zu starten, sshdohne es dämonisieren zu lassen. Das Problem in meinem Fall war, dass weder etwas Sinnvolles gezeigt syslognoch auth.loggezeigt wurde.

Als ich es vom Terminal aus startete, bekam ich:

# $(which sshd) -Ddp 10222
/etc/ssh/sshd_config line 8: address family must be specified before ListenAddress.

Viel besser! Mit dieser Fehlermeldung konnte ich sehen, was falsch ist, und es beheben. Keine der Protokolldateien enthielt diese Ausgabe.

Hinweis: Zumindest unter Ubuntu $(which sshd)ist dies die beste Methode, um die sshdAnforderung eines absoluten Pfades zu erfüllen . Andernfalls werden Sie die folgende Fehlermeldung erhalten: sshd re-exec requires execution with an absolute path. Die -p 10222Marken sshdhören an diesem alternativ Port, die Konfigurationsdatei überschreiben - dies so ist , dass sie nicht mit potentiell laufen kollidiert sshdInstanzen. Stellen Sie sicher, dass Sie hier einen freien Port auswählen.

Zum Schluss: Verbinden Sie sich mit dem alternativen Port ( ssh -p 10222 user@server).

Diese Methode hat mir schon oft geholfen, Probleme zu finden, sei es bei der Authentifizierung oder bei anderen Arten. Um eine wirklich ausführliche Ausgabe zu erhalten stdout, verwenden Sie $(which sshd) -Ddddp 10222(beachten Sie den Zusatz dd, um die Ausführlichkeit zu erhöhen). Weitere Informationen zur Fehlerbehebung finden Sie unter Güteprüfung man sshd.

0xC0000022L
quelle
Ich habe mich mit der falschen IP verbunden, aber das hat mich zum Laufen gebracht. Es wurde bemerkt, dass keiner meiner Verbindungsversuche in der Debug-Ausgabe
auftauchte
2
$ (which sshd) -Ddp 10222 ließ mich endlich sehen, was mein Problem verursachte. Vielen Dank!
Cuga
9

Sie können auch einen Host haben, dessen Arbeitsspeicher so stark fragmentiert ist, dass einer Seite kein zusammenhängender Arbeitsspeicher zugewiesen werden kann, um den Prozess für das Hosten einer SSH-Sitzung zu starten.

In einem solchen Fall können Sie eine der folgenden Meldungen erhalten:

ssh_exchange_identification: read: Connection reset by peer

oder:

Connection closed by aaa.bbb.ccc.ddd

je nachdem, wie weit der Host kommt, bevor er aussteigt.

Wenn Speicherfragmentierung die offensichtliche Ursache ist, besteht die Lösung darin, auf andere Weise auf den Server zuzugreifen und einige der relevanten Dienste neu zu starten. Ich habe festgestellt, dass Apache und MySQL die Schuld an VMs sind, da VMs keine Swap-Partition haben. Andernfalls starten Sie den Host neu.

gerrit_hoekstra
quelle
6

Nur für den Fall, weil mir das passiert ist. Stellen Sie sicher, dass sshd auf dem Host ausgeführt wird!

Es ist ein dummer Fehler, könnte aber wirklich Ihr Problem sein.

txomon
quelle
10
Wenn sshdnicht, würde die Verbindung nicht geschlossen, sondern abgelehnt (try ssh -p someportwithoutsshd localhost).
Anthon
4
Nun, mein Fall war keine direkte Verbindung. Ich habe einen Reverse-Tunnel für einen nicht hörenden Computer erstellt, und das war die Ausgabe in der SSH-Client-Verbindung.
TXOMON
1
dumm ich weiß auch nicht, dass ich kein sshd laufen habe, repariert es durch die installation von openssh-server
Bryan Estrito
4

Ich stellte fest, dass dieser Fehler darauf zurückzuführen war, dass die SSH-Sitzungen zum Server überschritten wurden. Ich fand die Wirte, die versuchten, anzuschließen und beendete alle Lernabschnitte von allen Klienten. Das Problem wurde behoben, nachdem alle Sitzungen geklärt wurden.

NvipiN
quelle
20
Wie hast du das gemacht?
Abgebrochen
4
wie hast du das gemacht? ping ...
knocte
Eine Möglichkeit wäre, die offenen Sitzungen zu finden, whoindem die Benutzerprozesse verwendet und beendet werden.
Flatron
So beenden Sie SSH-
Tejas Kale
4

Ich bin auf das ssh_exchange_identification: read: Connection reset by peerProblem in einem Skript gestoßen, das 16 oder mehr ssh-Sitzungen in einer Schleife startet. sshd kann anscheinend nicht mithalten; Ein kurzer Schlaf löste mein Problem:

for i in $(seq 32)
do
    ssh -f root@$HOST "./test_server -p $(expr $BASE_PORT + $i)" > svr${i}.out
    # for > 8 connections, ssh has ssh_exchange_identification issues
    sleep 0.1
done
duanev
quelle
3

Oder Sie haben getan, was ich gestern Abend getan habe, und / var / empty gelöscht. Anscheinend sind dieses Verzeichnis und seine Berechtigungen für das Funktionieren von sshd von wesentlicher Bedeutung, und es wird das Verzeichnis beim Neustart /etc/init.d/sshdnicht neu erstellen. Es wird kein Neustart fehlschlagen, und systemd wird Ihnen nicht mitteilen, warum.

Ich habe das Problem gefunden, indem ich sshd im Vordergrund ausgeführt habe:

# /usr/sbin/sshd -Dd
  Missing privilege separation directory: /var/empty/sshd

Neuaufbau der Verzeichnisse löste das Problem in meinem Fall:

drwxr-xr-x. root root  /var/empty
drwx--x--x. root root  /var/empty/sshd

Hinweis für Linux-Programmierer: Kritisch wichtige Dinge in /var/empty... wirklich ???

crashulater
quelle
ls -ld /var/emptyls: cannot access '/var/empty': No such file or directory. Mindestens eine Distribution hat dies also gänzlich beseitigt. Wenn man sich das /etc/init.d/sshdSkript ansieht, scheint es, dass zumindest unter Debian das Privilegentrennungsverzeichnis jetzt ist /var/run/sshdund beim Start erstellt wird, wenn es noch nicht existiert.
Roaima
1

ssh_exchange_identification: Connection closed by remote hostBeim Versuch, eine Verbindung zu SSH herzustellen, ist der Fehler aufgetreten: Ich habe eine Remote-Port-Weiterleitung für den SSH-Port 22 meines lokalen Computers durchgeführt, damit ich vorübergehend von einem Remote-Server im Internet darauf zugreifen kann.

In der Tat wurde der Fehler nur angezeigt , weil ich nicht daran erinnern , dass ich den SSH - Dienst beim Start deaktiviert , damit ich den SSH - Dienst auf dem lokalen Computer zu starten hatte: sudo service ssh start.

baptx
quelle
1
Danke, du rettest mein Leben.
Al Kasih
0

Alles der Reihe nach; Telnet an die Host-IP-Adresse, um zu überprüfen, ob der Port 22 auf diesem Host tatsächlich empfangsbereit ist (geöffnet ist):

telnet x.x.x.x 22

(Wenn nicht, können Sie ein Konsolenkabel anschließen, um sich anzumelden.)

In meinem Fall hat es nicht funktioniert und ich habe ein Konsolenkabel angeschlossen, um mich anzumelden. Nachdem ich mich angemeldet hatte, stellte ich fest, dass alle 5 VTY-Leitungen auf diesem Host (einem Cisco-Router) belegt waren.

Ich löschte alte Verbindungen, die dort hingen, um die VTY-Leitungen freizugeben, es funktionierte. Ich habe den Befehl "exec-timeout 15" unter den VTY-Zeilen hinzugefügt. Dann habe ich das Konsolenkabel entfernt.

Lektion:

Stellen Sie sicher, dass auf allen Ihren Geräten ein Timeout von 5 bis 10 Minuten eingestellt ist (falls keine Aktivität erkannt wird).

Oumar
quelle
2
In diesem Fall erhalten Sie eine "Verbindung abgelehnt" wie eine andere implizierte Antwort , nicht "Verbindung wird hergestellt", gefolgt von "Verbindung von Peer zurückgesetzt"
Jeff Schaller
1
Telnet verfügbar zu haben (Daemon, der auf Telnet lauscht), ist ein ziemlich schwerwiegender Sicherheitsfehler, ein Fehler, der der Hauptgrund dafür ist, dass ssh die bevorzugte Remote-Konsole ist.
Xalorous
Die Verwendung des Telnet-Clients zum Testen des SSH-Dämons an Port 22 ist keine Sicherheitslücke. Die Verwendung des Telnet-Clients zum Herstellen einer Verbindung zum Telnet-Dämon an Port 23 ist eine Sicherheitslücke.
Dan Anderson
0

Mein Fall wurde versehentlich Socket-Proxy gesetzt (was nicht funktioniert). Ich habe genau die gleiche Ausgabe von ssh -vvv und leeres sshd-Protokoll.

clarkttfu
quelle
0

Der Fehler ssh_exchange_identification: Connection closed by remote hostkann aus unbekannten Gründen auftreten. Als ich Visual Studio Code verwendete . Der gleiche Fehler ist aufgetreten, als ich versucht habe, mit dem git pullBefehl aus dem Remote-Repo zu ziehen .

Ich habe gerade das eingebettete Terminal geschlossen und Ubuntus Terminal geöffnet und wieder gezogen. Und es war erfolgreich

Mohammed Shareef C
quelle
0

Von mit CentOS Linux release 7.4.1708 (Core)mit OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017hinter einer Verbindung nicht filternden Ports hatte ich:

ssh_exchange_identification: Die Verbindung wurde vom Remote-Host geschlossen

Und es stellte sich heraus, dass mein Himbeer-Pi ausgeschaltet war!

Ich dachte, dass ein nicht eingeschalteter Host den Fehler "Keine Route zum Host" ergeben hätte. Der Raspberry Pi befindet sich hinter meinem ISP-Router, daher wurde wahrscheinlich die Verbindung geschlossen.

Dann wiederholte ich das Experiment (der Versuch, eine Verbindung zu einem abgeschalteten Raspberry Pi herzustellen) von einer anderen Internetverbindung aus, die ebenfalls keine Ports mit Debian Stretch filterte, OpenSSH_7.4p1 Debian-10+deb9u3, OpenSSL 1.0.2l 25 May 2017und dieses Mal hatte ich folgendes erwartet:

Keine Route zum Host

Gabriel Devillers
quelle