Website-Suche

5 Möglichkeiten, Remote-SSH-Sitzungen und -Prozesse nach dem Trennen der Verbindung am Laufen zu halten


SSH oder Secure Shell ist, vereinfacht ausgedrückt, eine Möglichkeit, mit der eine Person aus der Ferne auf einen anderen Benutzer auf einem anderen System zugreifen kann, jedoch nur in der Befehlszeile, d. h. im Nicht-GUI-Modus. Technisch gesehen erstellt es tatsächlich ein Pseudo-Terminal und hängt es an die Login-Shell des angemeldeten Benutzers an, wenn wir auf einem anderen System auf einen anderen Benutzer zugreifen und Befehle ausführen.

Wenn wir uns von der Sitzung abmelden oder die Sitzung abläuft, nachdem sie längere Zeit inaktiv war, wird das SIGHUP-Signal an das Pseudo-Terminal gesendet, und alle Jobs, die auf diesem Terminal ausgeführt wurden, sogar die Jobs, bei denen ihre übergeordneten Jobs auf dem Pseudo-Terminal initiiert werden, erhalten ebenfalls das SIGHUP-Signal und werden gezwungen, beendet zu werden.

Nicht verpassen: 5 nützliche Praktiken, um den SSH-Server sicher und geschützt zu halten

Nur die Jobs, die so konfiguriert wurden, dass dieses Signal ignoriert wird, überleben die Sitzungsbeendigung. Auf Linux-Systemen gibt es viele Möglichkeiten, diese Jobs auf dem Remote-Server oder einem anderen Computer auszuführen, auch nach der Abmeldung des Benutzers und der Beendigung der Sitzung.

Prozesse unter Linux verstehen

Normaler Ablauf

Normale Prozesse sind solche, die die Lebensdauer einer Sitzung haben. Sie werden während der Sitzung als Vordergrundprozesse gestartet und enden in einer bestimmten Zeitspanne oder wenn die Sitzung abgemeldet wird. Diese Prozesse haben ihren Besitzer als gültigen Benutzer des Systems, einschließlich root.

Verwaister Prozess

Verwaiste Prozesse sind Prozesse, die ursprünglich ein übergeordnetes Element hatten, das den Prozess erstellt hat, aber nach einiger Zeit unbeabsichtigt abgebrochen ist oder abgestürzt ist, sodass init zum übergeordneten Prozess dieses Prozesses geworden ist. Solche Prozesse haben init als unmittelbaren Elternteil, der auf diese Prozesse wartet, bis sie sterben oder enden.

Daemon-Prozess

Dies sind einige absichtlich verwaiste Prozesse, solche Prozesse, die absichtlich auf dem System laufen gelassen werden, werden als Daemon oder absichtlich verwaiste Prozesse bezeichnet. Es handelt sich in der Regel um lang laufende Prozesse, die einmal initiiert und dann von jedem steuernden Terminal getrennt werden, so dass sie im Hintergrund ausgeführt werden können, bis sie nicht abgeschlossen werden oder am Ende einen Fehler ausgeben. Das übergeordnete Element solcher Prozesse stirbt absichtlich, wodurch das Kind im Hintergrund ausgeführt wird.

Techniken, um die SSH-Sitzung nach dem Trennen der Verbindung am Laufen zu halten

Es gibt verschiedene Möglichkeiten, SSH-Sitzungen nach dem Trennen der Verbindung laufen zu lassen, wie unten beschrieben:

1. Verwenden des Bildschirmbefehls, um SSH-Sitzungen am Laufen zu halten

screen ist ein Text-Fenstermanager für Linux, der es dem Benutzer ermöglicht, mehrere Terminalsitzungen gleichzeitig zu verwalten, zwischen Sitzungen zu wechseln, Sitzungsprotokolle für die laufenden Sitzungen auf dem Bildschirm zu protokollieren und die Sitzung sogar jederzeit fortzusetzen, ohne sich Sorgen machen zu müssen, dass die Sitzung abgemeldet oder das Terminal geschlossen wird.

Bildschirmsitzungen können gestartet und dann vom steuernden Terminal getrennt werden, so dass sie im Hintergrund laufen und dann jederzeit und sogar an jedem Ort fortgesetzt werden können. Sie müssen nur Ihre Sitzung auf dem Bildschirm starten und wenn Sie möchten, trennen Sie sie vom Pseudo-Terminal (oder dem steuernden Terminal) und melden Sie sich ab. Wenn Sie möchten, können Sie sich erneut anmelden und die Sitzung fortsetzen.

Starten einer Bildschirmsitzung

Nachdem Sie den Befehl 'screen' eingegeben haben, befinden Sie sich in einer neuen Bildschirmsitzung, in der Sie neue Fenster erstellen, zwischen Fenstern wechseln, den Bildschirm sperren und viele weitere Dinge tun können, die Sie auf einem normalen Terminal tun können.

$ screen

Nachdem die Bildschirmsitzung gestartet wurde, können Sie einen beliebigen Befehl ausführen und die Sitzung weiter ausführen, indem Sie die Sitzung trennen.

Trennen eines Bildschirms

Gerade wenn Sie sich von der Remote-Sitzung abmelden möchten, aber die Sitzung, die Sie auf diesem Computer erstellt haben, am Leben erhalten möchten, müssen Sie lediglich den Bildschirm vom Terminal trennen, sodass kein Steuerungsterminal mehr vorhanden ist. Danach können Sie sich sicher abmelden.

Um einen Bildschirm vom Remote-Terminal zu trennen, drücken Sie einfach "Strg+a" unmittelbar gefolgt von "d" und Sie kehren zum Terminal zurück und sehen die Meldung, dass der Bildschirm abgenommen wurde. Jetzt können Sie sich sicher abmelden und Ihre Sitzung bleibt am Leben.

Fortsetzen der getrennten Bildschirmsitzung

Wenn Sie eine getrennte Bildschirmsitzung fortsetzen möchten, die Sie vor dem Abmelden verlassen haben, melden Sie sich einfach erneut am Remote-Terminal an und geben Sie "screen -r " ein, falls nur ein Bildschirm geöffnet ist, und wenn mehrere Bildschirmsitzungen geöffnet sind, führen Sie "screen -r <pid.tty.host> " aus.

$ screen -r
screen -r <pid.tty.host>

Um mehr über den Bildschirmbefehl und seine Verwendung zu erfahren, folgen Sie einfach dem Link: Verwenden des Bildschirmbefehls zum Verwalten von Linux-Terminalsitzungen

2. Verwendung von Tmux (Terminal Multiplexer), um SSH-Sitzungen am Laufen zu halten

Tmux ist eine weitere Software, die als Ersatz für den Bildschirm entwickelt wurde. Es verfügt über die meisten Funktionen des Bildschirms, mit wenigen zusätzlichen Funktionen, die es leistungsfähiger als den Bildschirm machen.

Es ermöglicht, abgesehen von allen Optionen, die der Bildschirm bietet, das horizontale oder vertikale Teilen von Fenstern zwischen mehreren Fenstern, das Ändern der Größe von Fensterscheiben, das Überwachen von Sitzungsaktivitäten, das Erstellen von Skripten im Befehlszeilenmodus usw. Aufgrund dieser Eigenschaften von tmux wurde es von fast allen Unix-Distributionen sehr gut angenommen und sogar in das Basissystem von OpenBSD aufgenommen.

Starten einer Tmux-Sitzung

Nachdem Sie ssh auf dem Remote-Host ausgeführt und tmux eingegeben haben, treten Sie in eine neue Sitzung ein, vor der sich ein neues Fenster öffnet, in dem Sie alles tun können, was Sie auf einem normalen Terminal tun.

$ tmux

Nachdem Sie Ihre Vorgänge auf dem Terminal ausgeführt haben, können Sie diese Sitzung vom steuernden Terminal trennen, sodass sie in den Hintergrund wechselt und Sie sich sicher abmelden können.

Tmux-Sitzung vom Terminal trennen

Entweder können Sie "tmux detach" während der laufenden tmux-Sitzung ausführen oder Sie können die Tastenkombination verwenden (Strg+b, dann d). Danach wird Ihre aktuelle Sitzung getrennt und Sie kehren zu Ihrem Terminal zurück, von wo aus Sie sich sicher abmelden können.

$ tmux detach

Fortsetzen der geschlossenen Tmux-Sitzung

Um die Sitzung wieder zu öffnen, die Sie getrennt und verlassen haben, als Sie sich vom System abgemeldet haben, melden Sie sich einfach erneut am Remote-Computer an und geben Sie "tmux attach" ein, um sich wieder an die geschlossene Sitzung anzuhängen, und sie wird immer noch da sein und laufen.

$ tmux attach

Um mehr über tmux und seine Verwendung zu erfahren, folgen Sie einfach dem Link: Verwenden Sie den tmux Terminal Multiplexer, um mehrere Linux-Terminals zu verwalten.

3. Verwenden des Befehls nohup, um SSH-Sitzungen weiter auszuführen

Wenn Sie mit screen oder tmux nicht so vertraut sind, können Sie nohup verwenden und Ihren lang laufenden Befehl in den Hintergrund senden, damit Sie fortfahren können, während der Befehl im Hintergrund ausgeführt wird. Danach können Sie sich sicher abmelden.

Mit dem Befehl nohup weisen wir den Prozess an, das SIGHUP-Signal zu ignorieren, das von der SSH-Sitzung beim Beenden gesendet wird, wodurch der Befehl auch nach dem Abmelden der Sitzung bestehen bleibt. Beim Abmelden der Sitzung wird der Befehl vom steuernden Terminal entfernt und läuft im Hintergrund als Daemon-Prozess weiter.

Ausführen des Befehls mit nohup im Hintergrund

Hier ist ein einfaches Szenario, in dem wir den Befehl find ausgeführt haben, um im Hintergrund in der SSH-Sitzung mit nohup nach Dateien zu suchen, woraufhin die Aufgabe in den Hintergrund gesendet wurde, wobei die Eingabeaufforderung sofort die PID und die Job-ID des Prozesses ([JOBID] PID) angab.

# nohup find / -type f $gt; files_in_system.out 2>1 &

Fortsetzen der Sitzung, um anzuzeigen, ob der Auftrag noch ausgeführt wird

Wenn Sie sich erneut anmelden, können Sie den Status des Befehls überprüfen, ihn mit 'fg %JOBID' wieder in den Vordergrund bringen, um den Fortschritt zu überwachen und so weiter. Unten zeigt die Ausgabe an, dass der Auftrag abgeschlossen wurde, da er bei der erneuten Anmeldung nicht angezeigt wird, und dass die Ausgabe angezeigt wird.

# fg %JOBID

4. Verwenden des Befehls disown, um SSH-Sitzungen am Laufen zu halten

Eine weitere elegante Möglichkeit, Ihren Befehl oder eine einzelne Aufgabe im Hintergrund ausführen zu lassen und auch nach dem Abmelden oder Trennen der Verbindung aktiv zu bleiben, ist die Verwendung von disown.

Verwerfen, entfernt den Job aus der Prozessjobliste des Systems, sodass der Prozess vor dem Beenden während der Sitzungstrennung geschützt ist, da er beim Abmelden kein SIGHUP von der Shell erhält.

Der Nachteil dieser Methode besteht darin, dass sie nur für die Jobs verwendet werden sollte, die keine Eingabe von stdin benötigen und auch nicht in stdout schreiben müssen, es sei denn, Sie leiten die Jobeingabe und -ausgabe speziell um, denn wenn der Job versucht, mit stdin oder stdout zu interagieren, wird er angehalten.

Ausführen des Befehls mit disown im Hintergrund

Unten haben wir den Ping-Befehl in den Hintergrund gesendet, damit ut weiter läuft und aus der Jobliste entfernt wird. Wie zu sehen ist, wurde der Auftrag zuerst angehalten, danach befand er sich immer noch in der Auftragsliste als Prozess-ID: 15368.

$ ping linux-console.net > pingout &
jobs -l
disown -h %1
ps -ef | grep ping

Nachdem dieses Verleugnungssignal an den Job übergeben wurde, wurde er aus der Jobliste entfernt, obwohl er immer noch im Hintergrund ausgeführt wurde. Der Auftrag wird weiterhin ausgeführt, wenn Sie sich erneut beim Remote-Server anmelden, wie unten gezeigt.

$ ps -ef | grep ping

5. Verwenden des Befehls setsid zum Ausführen von SSH-Sitzungen

Ein weiteres Dienstprogramm, um das erforderliche Verhalten zu erreichen, ist setsid. Nohup hat einen Nachteil in dem Sinne, dass die Prozessgruppe des Prozesses gleich bleibt, so dass der Prozess, der mit nohup läuft, anfällig für jedes Signal ist, das an die gesamte Prozessgruppe gesendet wird (wie Strg + C).

Setsid hingegen ordnet dem auszuführenden Prozess eine neue Prozessgruppe zu, und daher befindet sich der erstellte Prozess vollständig in einer neu zugewiesenen Prozessgruppe und kann sicher ausgeführt werden, ohne befürchten zu müssen, auch nach dem Abmelden der Sitzung beendet zu werden.

Führen Sie einen beliebigen Befehl mit setsid aus

Hier zeigt sich, dass der Prozess 'sleep 10m' seit seiner Erstellung vom steuernden Terminal losgelöst ist.

$ setsid sleep 10m
ps -ef | grep sleep

Wenn Sie sich nun erneut bei der Sitzung anmelden, wird dieser Vorgang weiterhin ausgeführt.

$ ps -ef | grep [s]leep

Schlussfolgerung

Welche Möglichkeiten können Sie sich vorstellen, um Ihren Prozess auch nach dem Abmelden von der SSH-Sitzung am Laufen zu halten? Wenn es einen anderen und effizienten Weg gibt, den Sie sich vorstellen können, erwähnen Sie dies in Ihren Kommentaren.

Verwandte Artikel: