Aus Linux-Magazin 05/2019

SSH-Sessions auf entfernten Rechnen nach Logout weiterlaufen lassen

© Irina Schmidt , 123RF

Lange laufende Jobs können auf mobilen Rechnern zum Problem werden. Dann nämlich, wenn der Anwender eigentlich einpacken und umziehen will, der Job aber noch nicht beendet ist.

Wer einen lange laufenden Job, etwa einen Benchmark, abbrechen muss, weil er den Rechner woanders braucht, der verliert unter Umständen viele Stunden bereits absolvierter Laufzeit und muss später wieder von vorn beginnen. Doch es gibt einen Ausweg: Terminal-Multiplexer – unter Linux etwa Screen oder Tmux – erlauben es, sich von der interaktiven Sitzung abzukoppeln. Später kann sich der Benutzer wieder in die weiter laufende Session einklinken.

Das funktioniert so: Zunächst logt man sich auf dem entfernten System wie gehabt via SSH ein und startet dann dort »screen« oder »tmux«. Dieses Beispiel verwendet zunächst »screen«. Wer vorhat, mehrere Sessions zu starten, kann jeder einen Namen geben oder das später mit [Strg]+[A][Shift]+[A] nachholen. Will der Admin irgendwann dann den Rechner einpacken, klinkt er sich aus der Session aus: [Strg]+[A][D] (bei Tmux mit [Strg]+[B][D]). Wenn er nun den Rechner ausschaltet, läuft die Session auf dem entfernten Server weiter.

Zu einem späteren Zeitpunkt will der Admin nachsehen, ob der lange laufende Job zum Ende gekommen ist. Er verbindet sich wieder via SSH mit dem entfernten Rechner und gibt »screen -r« ein. Gibt es nur eine entfernte Session, war es das schon. Gibt es mehrere, erhält er eine Auswahlliste. Dieses Spiel mit dem Ausloggen und Re-Connecten lässt sich übrigens beliebig wiederholen.

Der Benutzer kann sogar Vorkehrungen treffen, um nicht zu vergessen, eine Tmux- Session zu starten. Dafür hängt er auf dem entfernten Rechner an das Ende von »~/.bash_profile« die Zeilen aus Listing 1 an. Die Shell prüft dann bei jedem Login, ob bereits eine Tmux-Session existiert (dann gibt es die Datei, auf die die Umgebungsvariable »$TMUX« verweist) und ob es sich um eine SSH-Session handelt (dann ist die Umgebungsvariable »$SSH_CONNECTION« nicht leer).

Listing 1

Tmux-Autostart

01 if [[ -z "$TMUX" ]] && [ "$SSH_CONNECTION" != "" ]; then
02     tmux a || tmux new
03 fi

Trifft beides zu, wird die alte Session erneut aufgenommen. Handelt es sich um einen SSH-Login, aber noch ohne Tmux-Session, startet automatisch eine neue. Das einzige, woran der Anwender dann noch denken muss, ist, sich am Ende der Sitzung per [Strg]+[B][D] zu detachen. Tmux beherrscht zahlreiche Kommandos, die alle mit [Strg]+[B] losgehen. Eine Auswahl zeigt Tabelle 1.

Tabelle 1

Tmux-Tastenkürzel [Strg]+[B] …

Taste

Bedeutung

[D]

Detach: Trennen der aktuellen Sitzung, läuft im Hintergrund weiter

[S]

Switch: Wechseln zwischen verschiedenen Sitzungen

[C]

Create: Erzeugen einer neuen Sitzung

[&]

Beenden des aktuellen Fensters, muss bestätigt werden

[L]

Last: Wechseln zum letzten aktiven Fenster

[P]

Previous: Wechseln zum vorherigen Fenster

[N]

Next: Wechseln zum nächsten Fenster

[1]

Wechseln zum Fenster Nr. 1, analog mit 2, 3 …

[“]

Aktuelles Fenster horizontal teilen

[%]

Aktuelles Fenster vertikal teilen

[W]

Windows, Fensterliste anzeigen

[?]

Anzeige aller Tastenkürzel

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 1 HeftseitePreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
1 Kommentar
Älteste
Neuste Beste Bewertung
Philipp Hahn
7 Jahre her

Bzgl. Listing 1:'[[ … ]]’ ist eine Bash-Eigenart, die hier vollkommen überflüssig ist. Und für den Vergleich auf eine gesetzte Variable gibt es ‘[ -n … ]’. Besser also:
if [ -z “$TMUX” ] && [ -n “$SSH_CONNECTION” ]; then
tmux a || tmux new
fi

Nach oben