SSH oder Secure Shell Einfach ausgedrückt ist dies 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, dh im Nicht-GUI-Modus. Genauer gesagt, wenn wir uns mit ssh auf einem anderen System mit einem anderen Benutzer verbinden und Befehle auf diesem Computer ausführen, wird tatsächlich ein Pseudo-Terminal erstellt und an die Login-Shell des angemeldeten Benutzers angehängt.
Wenn wir uns von der Sitzung abmelden oder die Sitzung nach einiger Zeit im Leerlauf abläuft, wird das SIGHUP wird an das Pseudo-Terminal gesendet und alle Jobs, die auf diesem Terminal ausgeführt wurden, sogar die Jobs, deren Elternjobs auf dem Pseudo-Terminal initiiert werden, erhalten ebenfalls das SIGHUP-Signal und werden zwangsweise beendet.
Don' t Fräulein: 5 nützliche Praktiken, 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 auf dem Remote-Server oder einem beliebigen Computer auszuführen, selbst nach der Benutzerabmeldung und Sitzungsbeendigung.
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 einer bestimmten Zeitspanne oder wenn die Sitzung abgemeldet wird. Diese Prozesse haben ihren Eigentümer als einen der gültigen Benutzer des Systems, einschließlich root.
Verwaister Prozess
Verwaiste Prozesse sind diejenigen, die ursprünglich einen Elternprozess hatten, der den Prozess erstellt hat, aber nach einiger Zeit starb der Elternprozess unbeabsichtigt oder stürzte ab, wodurch init zum Elternprozess dieses Prozesses wurde. Solche Prozesse haben init als unmittelbare Eltern, die auf diese Prozesse warten, bis sie sterben oder enden.
Daemon-Prozess
Dies sind einige absichtlich verwaiste Prozesse. Solche Prozesse, die absichtlich auf dem System ausgeführt werden, werden als Daemon oder absichtlich verwaiste Prozesse bezeichnet. Sie sind normalerweise lang andauernde Prozesse, die einmal initiiert und dann von jedem steuernden Terminal getrennt werden, sodass sie im Hintergrund laufen können, bis sie nicht abgeschlossen werden oder am Ende einen Fehler auslösen. Das übergeordnete Element solcher Prozesse stirbt absichtlich, 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
Bildschirm ist ein Textfenster-Manager 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 sogar die Sitzung jederzeit fortzusetzen, ohne sich Gedanken darüber machen zu müssen, dass die Sitzung abgemeldet wird oder das Terminal wird geschlossen.
Bildschirmsitzungen können gestartet und dann vom steuernden Terminal getrennt werden, sodass 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 wann immer Sie möchten, trennen Sie sie vom Pseudo-Terminal (oder dem steuernden Terminal) und melden Sie sich ab. Wenn Sie das Gefühl haben, können Sie sich erneut anmelden und die Sitzung fortsetzen.
Bildschirmsitzung starten
Nach der Eingabe von ‘screen’ Befehl, befinden Sie sich in einer neuen Bildschirmsitzung. Innerhalb dieser Sitzung können Sie neue Fenster erstellen, zwischen Fenstern wechseln, den Bildschirm sperren und viele weitere Dinge tun, die Sie auf einem normalen Terminal tun können.
$ screen
Sobald die Bildschirmsitzung gestartet wurde, können Sie jeden Befehl ausführen und die Sitzung am Laufen halten, indem Sie die Sitzung trennen.
Abtrennen 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 nur den Bildschirm vom Terminal trennen, damit kein steuerndes Terminal mehr vorhanden ist. Danach können Sie sich sicher abmelden.
Um einen Bildschirm vom entfernten Terminal zu trennen, drücken Sie einfach “Ctrl+a”
unmittelbar gefolgt von “d”
und Sie kehren zum Terminal zurück und sehen die Meldung, dass der Bildschirm getrennt ist. Jetzt können Sie sich sicher abmelden und Ihre Sitzung bleibt bestehen.
Wiederaufnahme 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 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 Screen-Befehl und seine Verwendung zu erfahren, folgen Sie einfach dem Link:Use screen Command to Manage Linux Terminal Sessions
2. Verwenden von Tmux (Terminal Multiplexer), um SSH-Sitzungen am Laufen zu halten
Tmux ist eine weitere Software, die als Ersatz für Bildschirm entwickelt wurde . Es hat die meisten Fähigkeiten von screen , mit wenigen zusätzlichen Funktionen, die es leistungsfähiger als Bildschirm machen.
Abgesehen von allen Optionen, die der Bildschirm bietet, ermöglicht es das horizontale oder vertikale Teilen von Fenstern zwischen mehreren Fenstern, das Ändern der Größe von Fenstern, das Überwachen der Sitzungsaktivität, das Skripten im Befehlszeilenmodus usw. Aufgrund dieser Funktionen von tmux erfreut es sich einer fast breiten Akzeptanz alle Unix-Distributionen und sogar es wurde in das Basissystem von OpenBSD aufgenommen.
Starten Sie eine Tmux-Sitzung
Nachdem Sie ssh auf dem Remote-Host ausgeführt und tmux eingegeben haben , werden Sie in eine neue Sitzung eintreten, in der sich ein neues Fenster vor Ihnen öffnet, in dem Sie alles tun können, was Sie auf einem normalen Terminal tun.
$ tmux
Nachdem Sie Ihre Operationen auf dem Terminal durchgeführt haben, können Sie diese Sitzung vom steuernden Terminal trennen, sodass sie in den Hintergrund geht und Sie sich sicher abmelden können.
Tmux-Sitzung vom Terminal trennen
Entweder Sie können “tmux detach”
ausführen beim Ausführen der tmux-Sitzung oder Sie können die Tastenkombination (Ctrl+b then 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
Wiederaufnahme 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 Attach“ ein wieder an die geschlossene Sitzung anhängen und sie wird immer noch da sein und ausgeführt werden.
$ tmux attach
Um mehr über tmux und seine Verwendung zu erfahren, folgen Sie einfach dem Link:Use Tmux Terminal Multiplexer to Manage Multiple Linux Terminals.
3. Verwendung des nohup-Befehls, um SSH-Sitzungen weiter auszuführen
Wenn Sie mit Bildschirm nicht so vertraut sind oder tmux , können Sie nohup verwenden und senden Sie Ihren lang laufenden Befehl in den Hintergrund, damit Sie fortfahren können, während der Befehl weiterhin im Hintergrund ausgeführt wird. Danach können Sie sich sicher abmelden.
Mit dem Befehl nohup weisen wir den Prozess an, das SIGHUP zu ignorieren Signal, 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 getrennt und läuft im Hintergrund als Daemon-Prozess weiter.
Befehl mit nohup im Hintergrund ausführen
Hier ist ein einfaches Szenario, in dem wir den Befehl find ausgeführt haben, um in einer ssh-Sitzung mit nohup im Hintergrund nach Dateien zu suchen, wonach die Aufgabe in den Hintergrund gesendet wurde, wobei die Eingabeaufforderung sofort mit PID zurückkehrte und Job-ID des Prozesses ([JOBID] PID)
.
# nohup find / -type f $gt; files_in_system.out 2>1 &
Wiederaufnahme der Sitzung, um zu sehen, ob der Job noch läuft
Wenn Sie sich erneut anmelden, können Sie den Status des Befehls überprüfen und ihn mit 'fg %JOBID'
wieder in den Vordergrund bringen um seinen Fortschritt zu überwachen und so weiter. Unten zeigt die Ausgabe, dass der Job abgeschlossen wurde, da er bei der erneuten Anmeldung nicht angezeigt wird, und hat die angezeigte Ausgabe geliefert.
# fg %JOBID
4. Verwenden des disown-Befehls, 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 aktiv zu bleiben, ist die Verwendung von disown .
Ablehnen , entfernt den Job aus der Prozessjobliste des Systems, sodass der Prozess davor geschützt ist, während der Sitzungstrennung beendet zu werden, da er kein SIGHUP empfängt von der Shell, wenn Sie sich abmelden.
Der Nachteil dieser Methode ist, dass sie nur für die Jobs verwendet werden sollte, die keine Eingaben von der stdin benötigen und keiner muss in stdout schreiben , es sei denn, Sie leiten Job-Eingabe und -Ausgabe ausdrücklich um, denn when job versucht, mit stdin zu interagieren oder stdout , es wird angehalten.
Befehl mit disown im Hintergrund ausführen
Unten haben wir Ping gesendet in den Hintergrund, damit ut weiter läuft und aus der Jobliste entfernt wird. Wie zu sehen war, wurde der Job zuerst angehalten, danach war er immer noch in der Jobliste als Prozess-ID:15368 .
$ ping tecmint.com > pingout & $ jobs -l $ disown -h %1 $ ps -ef | grep ping
Nachdem dieses Ablehnungssignal an den Job übergeben wurde, wurde er aus der Jobliste entfernt, obwohl er immer noch im Hintergrund lief. Der Job würde immer noch ausgeführt, wenn Sie sich wie unten gezeigt erneut beim Remote-Server anmelden würden.
$ ps -ef | grep ping
5. Setsid-Befehl verwenden, um SSH-Sitzungen zum Laufen zu bringen
Ein weiteres Dienstprogramm zum Erzielen des erforderlichen Verhaltens ist setsid . Nein hat insofern einen Nachteil, als die Prozessgruppe des Prozesses dieselbe bleibt, sodass der mit nohup laufende Prozess anfällig für jedes Signal ist, das an die gesamte Prozessgruppe gesendet wird (wie Ctrl + C
).
setid Andererseits weist es dem ausgeführten 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, dass er beendet wird, selbst nach dem Abmelden der Sitzung.
Führen Sie einen beliebigen Befehl mit setsid aus
Hier zeigt es, dass der Prozess ‘sleep 10m’
wurde seit seiner Erstellung vom steuernden Terminal getrennt.
$ setsid sleep 10m $ ps -ef | grep sleep
Wenn Sie sich jetzt wieder in die Sitzung einloggen, wird dieser Prozess immer noch ausgeführt.
$ ps -ef | grep [s]leep
Schlussfolgerung
Welche Möglichkeiten könnten Sie sich vorstellen, um Ihren Prozess auch nach dem Abmelden von der SSH-Sitzung am Laufen zu halten? Wenn Ihnen eine andere und effiziente Möglichkeit einfällt, erwähnen Sie dies in Ihren Kommentaren.