Es kann keine erneute Verbindung zu einer Bildschirmsitzung hergestellt werden, nachdem die SSH-Verbindung getrennt wurde

16

Ich habe mich zuvor wieder mit einer lang laufenden Bildschirmsitzung verbunden screen -dr control. Manchmal wird dieser Befehl jedoch nicht wieder mit dem Bildschirm verbunden und bleibt für immer hängen (mehr als 10 Minuten, danach habe ich abgebrochen). Dies geschieht nur, wenn die SSH-Verbindung unerwartet getrennt wird und nicht, wenn der Bildschirm ordnungsgemäß getrennt ist Ctrl-A d. Andere Schalter, wie zB screen -xoder screen -D -RRauch nicht funktionieren.

In diesem Beitrag wird vorgeschlagen , den PTY zu beenden, der die Bildschirmsitzung enthält, wodurch die Trennung des Bildschirms abgeschlossen wird. Es tötet jedoch einfach die Shell, von der screen -dr controlaufgerufen wurde.

Beispielsweise:

$ ps -ef | grep control | grep -v grep
nomad     7387  7109  0 13:05 pts/50   00:00:00 screen -dr control
nomad    15299     1  0 Nov27 ?        00:13:47 SCREEN -S control

$ ps -ef | grep bash | grep 'pts/50'
nomad     7109  7108  0 12:49 pts/50   00:00:00 -bash

Der verlinkte Beitrag schlägt vor, den bashProzess mit PID 7109 abzubrechen. Dadurch wird auch der screen -dr controlProzess mit PID 7387 abgebrochen. Danach kann ich immer noch keine Verbindung zum Bildschirm herstellen.

Der Prozess, SCREEN -S controlder die Bildschirmsitzung gestartet hat init, ist der übergeordnete Prozess , den ich offensichtlich nicht beenden kann.

Gibt es eine Möglichkeit, die Sitzung mit dem nicht reagierenden Bildschirm wiederherzustellen?

Update: Dies geschieht unter CentOS 6.4 mit Kernel 2.6.32-358.6.1.el6.x86_64. Die Shells sind alle bash Version 4.1.2 (1) -release.

Viktor Rosenfeld
quelle
3
Was steht screen -lsin diesen "hängenden" Fällen? screen -d -r <session>bedeutet "abnehmen und wiederherstellen", daher sollte es keine Rolle spielen, wenn Sie es nicht aus erster Hand abgenommen haben. (Und dafür tut es oft nicht ...)
mveroone
Versuchen Sie, lsof auf den Bildschirmprozessen auszuführen, und prüfen Sie, ob etwas "hängengeblieben" ist. Screen verwendet einen Unix-Socket, um zwischen Prozessen zu kommunizieren, wahrscheinlich hat ihn etwas offen gehalten. Stellen Sie außerdem sicher, dass der Socket nicht gelöscht oder sein Besitzer geändert wurde. Im Allgemeinen sollten Sie auch angeben, welches Betriebssystem und welche Version Sie verwenden, obwohl ich nichts Besonderes im Sinn habe, das diesmal vom Betriebssystem abhängen würde.
Dan Pritts
3
Ssh'n Sie über einen anderen Hop, z. B. mit Netcat als Proxy-Befehl? In diesem Fall hatte ich das Problem, dass die SSH-Verbindung zur ersten Box unterbrochen wurde, aber der Netcat-Proxy-Befehl eine zweite SSH-Verbindung offen hält. das -d sollte aber funktionieren.
Jens Timmerman
Jens, dein Rat hat es geschafft. Ich habe in der Tat einen Proxy über Netcat erstellt und durch das Beenden auf dem Zwischenhost konnte ich erneut eine Verbindung zum Bildschirm herstellen.
Viktor Rosenfeld
Warum sollten Sie den übergeordneten Prozess des nicht reagierenden Bildschirmbefehls beenden wollen? Sie möchten den Befehl zum Anhängen des Bildschirms selbst beenden. # 7387 in deinem Fall.
Matthias Urlichs

Antworten:

6

Ich denke, du solltest es versuchen

screen -DR 

Auch beim nächsten Mal sollte der verärgerte Aufruf (in Großbuchstaben) dazu führen, dass die Verbindung zu der anderen Sitzung unterbrochen wird, die von Ihrem zwischengeschalteten Netcat-Hop gehalten wird.

Pazifist
quelle
Ich habe es versucht, es funktioniert nicht. Das Beenden des Netcat-Proxys ist der Trick.
Viktor Rosenfeld
Seltsam. Es sollte. Was passiert stattdessen?
Matthias Urlichs
Alle weiteren Aufrufe von screen (-dr, -x, -DR) bleiben für immer hängen. Sobald ich den Netcat-Proxy beendet habe, funktionieren diese Aufrufe wieder.
Viktor Rosenfeld
1

Wie von Jens Timmerman vorgeschlagen, war der ultimative Grund für dieses seltsame Verhalten, dass ich mit SSH ProxyCommand und eine Verbindung zum Remoteserver herstellte ncat. Nachdem ncatich das auf dem Zwischencomputer beendet habe, kann ich mich wieder an die Bildschirmsitzung anschließen.

Viktor Rosenfeld
quelle
-2

Wenn dies ein häufiges Problem ist, können Sie auch in Betracht ziehen, mosh als SSH-Ersatz zu verwenden:

http://mosh.mit.edu

Fred Concklin
quelle