# Problem mit Zombiesessions



## mccae (21. August 2012)

Hallo,

Ich weiß nicht wie viele Linuxuser sich hier rumtummeln - ich hätte da ein kleines Problem unter Debian Squeeze x64 auf einer frisch eingerichteten Maschine.
Es geht nämlich um Sessions über den SSHD.
Ich habe schon viel mit Debiansystemen gearbeitet, doch soetwas ist mir bis jetzt eigentlich noch nicht passiert.

Es kommt ab und zu vor, dass der SSH Client (Putty), welcher sich mit dem Server verbindet einfach einfriert und einige Zeit später den Verbindungsabbruch mit "Software caused connection abort" quittiert.
Genau dies passiert auch ab und zu nachdem ich mich mit "logout" oder "exit" auslogge. Anstatt getrennt zu werden, friert die Ausgabe ein und es erscheint der oben erwähnte Fehler. Etwa 10% der Auslogversuche enden so.

Das "Einfrieren" ist jedoch nicht das eigentliche Problem.
Jedes Mal wenn dies geschieht, dann habe ich immer noch die entsprechenden Userprozesse von sshd auf der Prozessliste.
Heißt, dass die SSH und SFTP Sessions offen bleiben und nicht abgebaut werden.
Diese müssen dann manuell terminiert werden.

Das Unheimliche daran:
Laut netstat ist die zum Client hergestellte Verbindung immer noch aktiv - was gar nicht mehr sein kann, da der Computer entweder schon längst ausgeschaltet ist, oder die Verbindung von Windows bereits abgebaut wurde.
Manchmal jedoch gibt es da beim Client eine Verbindung to "an unconnected endpoint" - das Schließen derer verursacht auch einen korrektes Schließen der Verbindung sowie der Session am Server (doch das ist eher ein Ausnahmefall).

Am Server schaut das dann so aus:

```
tcp        0    0 xxx.xxx.xxx.xxx:xxxxx   xxx.xxx.xxx.xxx:xxxxx      VERBUNDEN   24828/sshd: e.ssesshah
.
.
.
```
...und natürlich der individuelle Processtree:


```
/usr/sbin/sshd
	sshd: e.ssesshah [priv]
		sshd: e.ssesshah@pts/0
			-bash
				su
					bash
						mc
							bash -rcfile .bashrc
```

w zeigt auch an, dass die User eingeloggt, jedoch seit Zeitpunkt der Verbindungsunterbrechung "idle" sind.

Kann mir einer sagen warum die Verbindung "nicht getrennt" ist, obwohl sie das sein sollte?
Warum wird die SSH Session (Nebeninfo: SSLv2 und über privateKey) nicht abgebaut, sondern müllt mir das System mitsamt laufenden Applikationen zu?
Ich habe über zwei Stunden (~2:45) gewartet, doch es wurden weder die Verbindung noch die Sessions beendet.

Kennt sich da einer aus?


----------



## deepthroat (21. August 2012)

Hi.

Wenn du öfter Verbindungsabbrüche hast, dann könnte es sich bei dem Phänomen um eine TCP half-open Verbindung handeln. Dabei bekommt der Server nicht mit, das der Client die Verbindung nicht mehr hält, evtl. da er abgestürzt ist oder während einem Netzwerkproblem seine Verbindung einfach getrennt hat.

Siehe https://en.wikipedia.org/wiki/TCP_half-open

Zur Vermeidung sendet man Keepalive Pakete. Siehe http://www.solucorp.qc.ca/linuxconf/help.files/opensshd/opensshd-2.html#ss2.25

Evtl. mußt du das aber in Putty auch konfigurieren...

Gruß


----------



## erik s. (21. August 2012)

Geben die Logfiles was her?
Schmiert dein Putty auch ab, oder meldet er den Fehler korrekt und beendet dann sauber?

Ich hatte ein ähnliches Problem mal, allerdings kann ich mich nicht entsinnen, ob die Clientprozesse weiterliefen oder nicht. In jenem Fall wurden meine SSH-Sessions regelmäßig nach etwa 120 Sekunden gekillt. Die Ursache war allerings ein Netzwerkfehler, der durch Austausch eines Switches gelöst wurde 

EDIT: Da war schon jemand schneller als ich.


----------



## mccae (21. August 2012)

Hallo,

Danke für eure Antworten.

SSHD ist auf KeepAlive gesetzt. Ich habe gerade die TCP Konfiguration geprüft und gesehen, dass die KeepAlive Time bei 7200 Sekunden, also zwei Stunden liegt.
Heißt die Verbindung sollte nach zwei Stunden abgebaut und die Sessions beendet werden. Ich glaube jedoch dass ich etwas mehr als zwei Stunden gewartet habe - das müsste ich nochmals prüfen.

Die Logfiles geben nichts her - zumindest sehe ich nichts auffälliges. Weder in den Kernel logs noch sonst wo.
Putty selbst stürzt nicht ab, sondern meldet nur die Verbindungstrennung ("Software caused connection abort").

Was die eigentliche Unterbrechung der Verbindung angeht - vielleicht ist das irgendeine Netzwerkkomponente auf dem Weg schuld, welche nach zu langer "Stille" einfach unterbricht. Denn oft passiert das Ganze wenn ich das Fenster etwa eine halbe Stunde lang im Hintergrund laufen habe.
Nur kann ich mir nicht erklären warum das auch direkt durch initiieren eines Logouts passiert. Anstatt "Connection closed by remote host" bekomme ich ja ab und zu die oben erwähnte Meldung mitsamt offener Verbindung und noch anwesenden UserProzessen auf dem Server.

Ich bin gerade immer noch am Grübeln, zumal mir wie gesagt so etwas mit anderen Servern bei anderen Hostern noch nicht passiert ist.
Außerdem überlege ich auch gerade ob es nicht besser wäre den Defaultkernel des Hosters durch den Defaultkernel der Distribution zu ersetzen.

Gruß,


----------

