Website-Suche

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


SSH oder Secure Shell in einfachen Worten ist eine Möglichkeit, mit der eine Person aus der Ferne auf einen anderen Benutzer auf einem anderen System zugreifen kann, jedoch nur über die Befehlszeile, d. h. im Nicht-GUI-Modus. Technisch ausgedrückt: Wenn wir eine SSH-Verbindung zu einem anderen Benutzer auf einem anderen System herstellen und Befehle auf diesem Computer ausführen, wird tatsächlich ein Pseudo-Terminal erstellt und an die Anmeldeshell des angemeldeten Benutzers angehängt.

Wenn wir uns von der Sitzung abmelden oder die Sitzung nach längerer Inaktivität abläuft, wird das Signal SIGHUP an das Pseudo-Terminal und alle auf diesem Terminal ausgeführten Jobs gesendet Die Jobs, deren übergeordnete Jobs auf dem Pseudoterminal initiiert werden, erhalten ebenfalls das SIGHUP-Signal und werden zur Beendigung gezwungen.

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

Nur die Jobs, die so konfiguriert wurden, dass sie dieses Signal ignorieren, überleben die Sitzungsbeendigung. Auf Linux-Systemen haben wir viele Möglichkeiten, diese Jobs auch nach der Benutzerabmeldung und Sitzungsbeendigung auf dem Remote-Server oder einem beliebigen Computer auszuführen.

Prozesse unter Linux verstehen

Normaler Prozess

Normale Prozesse sind solche, die eine Sitzungsdauer haben. Sie werden während der Sitzung als Vordergrundprozesse gestartet und enden in einem bestimmten Zeitraum oder wenn die Sitzung abgemeldet wird. Der Eigentümer dieser Prozesse ist jeder gültige Benutzer des Systems, einschließlich Root.

Waisenprozess

Verwaiste Prozesse sind solche, die ursprünglich einen übergeordneten Prozess hatten, der den Prozess erstellte, der jedoch nach einiger Zeit unbeabsichtigt abstürzte oder abstürzte, wodurch init zum übergeordneten Prozess dieses Prozesses wurde. Solche Prozesse haben init als ihr unmittelbares übergeordnetes Element, das auf diese Prozesse wartet, bis sie sterben oder enden.

Daemon-Prozess

Hierbei handelt es sich um einige absichtlich verwaiste Prozesse. Solche Prozesse, die absichtlich auf dem System ausgeführt werden, werden als Daemon oder absichtlich verwaiste Prozesse bezeichnet. Dabei handelt es sich in der Regel um Prozesse mit langer Laufzeit, die einmal initiiert und dann von einem steuernden Terminal getrennt werden, sodass sie im Hintergrund ausgeführt werden können, bis sie nicht abgeschlossen werden oder am Ende einen Fehler auslösen. Das übergeordnete Element solcher Prozesse wird absichtlich abgebrochen, sodass das untergeordnete Element im Hintergrund ausgeführt wird.

Techniken, um die SSH-Sitzung nach der Trennung am Laufen zu halten

Es gibt verschiedene Möglichkeiten, SSH-Sitzungen nach der Trennung weiterlaufen 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, Sitzungen 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, sodass sie im Hintergrund laufen und dann jederzeit und sogar an jedem Ort wieder aufgenommen werden können. Sie müssen lediglich Ihre Sitzung auf dem Bildschirm starten und sie bei Bedarf vom Pseudo-Terminal (oder dem steuernden Terminal) trennen und abmelden. Wenn Sie das Gefühl haben, 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 dieser Sitzung können Sie neue Fenster erstellen, zwischen Fenstern wechseln, den Bildschirm sperren und viele andere Dinge tun, die Sie damit tun können ein normales Terminal.

screen

Sobald die Bildschirmsitzung gestartet ist, können Sie einen beliebigen Befehl ausführen und die Sitzung am Laufen halten, indem Sie die Sitzung trennen.

Trennen eines Bildschirms

Wenn Sie sich von der Remote-Sitzung abmelden, aber die auf diesem Computer erstellte Sitzung am Leben erhalten möchten, müssen Sie lediglich den Bildschirm vom Terminal trennen, sodass kein Steuerterminal mehr vorhanden ist. Anschließend 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 angezeigt wird ist losgelöst. Jetzt können Sie sich sicher abmelden und Ihre Sitzung bleibt bestehen.

Fortsetzung der Sitzung mit getrenntem Bildschirm

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 vorhanden sind Bildschirmsitzungen werden geöffnet. Führen Sie “screen -r aus.

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

Um mehr über den Bildschirmbefehl und seine Verwendung zu erfahren, folgen Sie einfach dem Link: Verwenden Sie den Bildschirmbefehl, um Linux-Terminalsitzungen zu verwalten

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

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

Abgesehen von allen Optionen, die der Bildschirm bietet, ermöglicht es die horizontale oder vertikale Aufteilung von Fenstern auf mehrere Fenster, die Größenänderung von Fensterfenstern, die Überwachung der Sitzungsaktivität, die Erstellung von Skripten im Befehlszeilenmodus usw. Aufgrund dieser Funktionen von tmux erfreut sich tmux einer breiten Akzeptanz alle Unix-Distributionen und sogar im Basissystem von OpenBSD enthalten.

Starten Sie eine Tmux-Sitzung

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

tmux

Nachdem Sie Ihre Vorgänge am 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.

Trennen Sie die Tmux-Sitzung vom Terminal

Entweder können Sie „tmux detach“ bei laufender tmux-Sitzung ausführen oder Sie können die Tastenkombination (Strg+b, dann d) verwenden. 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 so gelassen haben, als Sie sich vom System abgemeldet haben, melden Sie sich einfach erneut am Remote-Computer an und geben Sie „tmux attachment“ ein, um die Verbindung zur geschlossenen Sitzung wiederherzustellen 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 Tmux Terminal Multiplexer, um mehrere Linux-Terminals zu verwalten.

3. Verwenden des Befehls nohup, um weiterhin SSH-Sitzungen 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 währenddessen fortfahren können Der Befehl wird weiterhin im Hintergrund ausgeführt. Danach können Sie sich sicher abmelden.

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

Befehl wird mit Nohup im Hintergrund ausgeführt

Hier ist ein einfaches Szenario, in dem wir den Befehl „find“ ausgeführt haben, um in einer SSH-Sitzung mit „nohup“ nach Dateien im Hintergrund zu suchen. Anschließend wurde die Aufgabe in den Hintergrund gesendet und die Eingabeaufforderung wurde sofort mit PID und Job zurückgegeben >ID des Prozesses ([JOBID] PID).

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

Fortsetzen der Sitzung, um zu sehen, ob der Job 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 holen, um seinen Fortschritt zu überwachen und so weiter. Unten zeigt die Ausgabe, dass der Auftrag abgeschlossen wurde, da er bei der erneuten Anmeldung nicht angezeigt wird, und hat die angezeigte Ausgabe geliefert.

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 laufen zu lassen und auch nach dem Abmelden oder Trennen der Sitzung am Leben zu bleiben, ist die Verwendung von disown.

Disown: Entfernt den Job aus der Prozessjobliste des Systems, sodass der Prozess davor geschützt ist, während der Sitzungstrennung beendet zu werden, da er von der Shell kein SIGHUP empfängt Sie melden sich ab.

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

Befehl wird mit „disown“ im Hintergrund ausgeführt

Unten haben wir den ping-Befehl an den Hintergrund gesendet, damit UT weiter ausgeführt wird und aus der Jobliste entfernt wird. Wie Sie sehen, wurde der Job zunächst ausgesetzt, danach befand er sich weiterhin in der Jobliste als Prozess-ID: 15368.

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

Danach wurde das Disown-Signal an den Job weitergeleitet und aus der Jobliste entfernt, obwohl er weiterhin im Hintergrund ausgeführt wurde. Der Job würde weiterhin ausgeführt, wenn Sie sich wie unten gezeigt erneut beim Remote-Server anmelden würden.

ps -ef | grep ping

5. Verwenden des Befehls „setsid“, um SSH-Sitzungen auszuführen

Ein weiteres Dienstprogramm zum Erreichen des erforderlichen Verhaltens ist setsid. Nohup hat den Nachteil, dass die Prozessgruppe des Prozesses dieselbe bleibt, sodass der mit Nohup ausgeführte Prozess anfällig für jedes Signal ist, das an die gesamte Prozessgruppe gesendet wird (wie Strg + C ). ).

setsid hingegen weist dem ausgeführten Prozess eine neue Prozessgruppe zu, sodass sich der erstellte Prozess vollständig in einer neu zugewiesenen Prozessgruppe befindet und sicher ausgeführt werden kann, ohne befürchten zu müssen, dass er auch nach dem Abmelden der Sitzung beendet wird.

Führen Sie einen beliebigen Befehl mit der Setsid aus

Hier wird gezeigt, dass der Prozess ‘sleep 10m’ seit seiner Erstellung vom steuernden Terminal getrennt wurde.

setsid sleep 10m
ps -ef | grep sleep

Wenn Sie sich nun erneut für die Sitzung anmelden, wird dieser Prozess weiterhin ausgeführt.

ps -ef | grep [s]leep

Abschluss

Welche Möglichkeiten könnten Sie sich vorstellen, um Ihren Prozess auch nach der Abmeldung von der SSH-Sitzung am Laufen zu halten? Wenn Ihnen eine andere und effiziente Möglichkeit einfällt, erwähnen Sie dies bitte in Ihren Kommentaren.