GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann man eine SSH-Sitzung trennen, ohne einen laufenden Prozess zu beenden?

Verwenden Sie

Ctrl-Z

um die Anwendung anzuhalten und zur Befehlszeile zurückzukehren. Verwenden Sie dann

bg

damit der Prozess im Hintergrund fortgesetzt werden kann. Endlich verwenden

disown

Damit der Prozess nicht geschlossen wird, wenn Sie Ihre Sitzung trennen und Ihr Terminal schließen.

Der Prozess wird weiter ausgeführt, aber es gibt keine Möglichkeit, sich wieder mit dem Terminal zu verbinden, um die mir bekannte Ausgabe anzuzeigen, wenn Sie sich wieder mit einer neuen Sitzung verbinden.


Verwenden Sie reptyr

Genau das ist der Fall man 1 reptyr ausdrücklich erwähnt:

reptyr ist ein Dienstprogramm, mit dem ein vorhandenes laufendes Programm an ein neues Terminal angeschlossen werden kann. Sie haben einen lang andauernden Prozess über ssh gestartet, müssen ihn aber verlassen und möchten ihn nicht unterbrechen? Starten Sie einfach eine screen , verwenden Sie reptyr um es zu packen, und beenden Sie dann die SSH-Sitzung und gehen Sie nach Hause.

(Das Handbuch erwähnt screen , können Sie tmux verwenden stattdessen, was immer Sie bevorzugen).

Verpassen Sie diesen Hinweis nicht:

reptyr hängt von ptrace(2) ab Systemaufruf zum Anhängen an das entfernte Programm. Auf Ubuntu Maverick und höher ist diese Fähigkeit aus Sicherheitsgründen standardmäßig deaktiviert. Sie können es vorübergehend aktivieren, indem Sie

echo 0 > /proc/sys/kernel/yama/ptrace_scope

als root oder dauerhaft durch Bearbeiten der Datei /etc/sysctl.d/10-ptrace.conf , die auch weitere Informationen zu dieser Einstellung enthält.

Wenn die Datei nicht existiert, aber die Datei /etc/sysctl.d/ Verzeichnis tut, dann reicht es wahrscheinlich aus, es mit folgendem Inhalt zu erstellen:

kernel.yama.ptrace_scope = 0

Die Einstellung wird beim nächsten Neustart übernommen. Bitte beachten Sie die Sicherheitsüberlegungen unten.

Grundlegende Verwendung

Die grundlegende Verwendung ist einfach:

reptyr PID

wobei PID ist die PID des Prozesses, den Sie an ein neues Terminal anhängen möchten. Beachten Sie reptyr fügt einen Prozess nur an ein anderes Terminal an. Das bedeutet nicht, dass der Prozess ein Kind der neuen Shell wird.

Sicherheitsüberlegungen

Einstellung ptrace_scope als 0 wird nicht empfohlen.

Da Linux immer beliebter wird, wird es zu einem größeren Ziel für Malware. Eine besonders besorgniserregende Schwäche der Linux-Prozessschnittstellen besteht darin, dass ein einzelner Benutzer in der Lage ist, den Speicher und den Ausführungsstatus jedes seiner Prozesse zu untersuchen. Wenn beispielsweise eine Anwendung (z. B. Pidgin) kompromittiert wurde, wäre es einem Angreifer möglich, sich an andere laufende Prozesse (z. B. Firefox, SSH-Sitzungen, GPG-Agent usw.) anzuhängen, um zusätzliche Anmeldeinformationen zu extrahieren und den Umfang ihrer Anwendung weiter zu erweitern angreifen, ohne auf benutzergestütztes Phishing zurückzugreifen.

Das ist kein theoretisches Problem. SSH-Session-Hijacking (http://www.storm.net.nz/projects/7) und willkürliche Code-Injection-Angriffe (http://c-skills.blogspot.com/2007/05/injectso.html) existieren bereits und bleiben bestehen möglich, wenn ptrace darf wie bisher operieren. Seit ptrace nicht häufig von Nicht-Entwicklern und Nicht-Administratoren verwendet wird, sollten System-Builder die Möglichkeit haben, dieses Debugging-System zu deaktivieren.

[…]

Die sysctl-Einstellungen (schreibbar nur mit CAP_SYS_PTRACE ) sind:

0 - klassischer ptrace Berechtigungen:Ein Prozess kann PTRACE_ATTACH zu jedem anderen Prozess, der unter der gleichen uid läuft, solange er dumpbar ist […]

1 - eingeschränkt ptrace :Ein Prozess muss eine vordefinierte Beziehung zu dem untergeordneten Prozess haben, den er aufrufen möchte PTRACE_ATTACH an. Standardmäßig ist diese Beziehung nur die ihrer Nachkommen, wenn die oben genannten klassischen Kriterien ebenfalls erfüllt sind. […]

2 - nur Admin-Attach:nur Prozesse mit CAP_SYS_PTRACE kann ptrace verwenden mit PTRACE_ATTACH , oder durch Kinder, die PTRACE_TRACEME anrufen .

3 - kein Anhängen:Kein Prozess darf ptrace verwenden mit PTRACE_ATTACH noch über PTRACE_TRACEME . Einmal eingestellt, kann dieser sysctl-Wert nicht mehr geändert werden.

Ein sinnvoller Ansatz ist das Setzen von ptrace_scope bis 2 und dann reptyr zulassen um ptrace zu verwenden :

echo 2 | sudo tee /proc/sys/kernel/yama/ptrace_scope
sudo setcap CAP_SYS_PTRACE+pe /usr/bin/reptyr

Vergessen Sie nicht die Datei, die die permanente Einstellung enthält.

Fähigkeiten werden im Inode der Datei gespeichert. Daher bin ich nicht überrascht, wenn reptyr verliert die Fähigkeit, wenn es aktualisiert wird (atomar durch eine neue ausführbare Datei ersetzt).


Sie können einen Befehl vollständig aufheben (in bash oder zsh , möglicherweise andere Shells) mit dem disown Befehl. Der Befehl ist jedoch möglicherweise nicht glücklich darüber, wenn er ein tty erfordert, in diesem Fall siehe reptyr Antwort.

$ ssh somecentos7system
-bash-4.2$ sleep 252727
^Z
[1]+  Stopped                 sleep 252727
-bash-4.2$ bg
[1]+ sleep 252727 &
-bash-4.2$ disown
-bash-4.2$ logout
Connection to somecentos7system closed.
$ ssh somecentos7system
-bash-4.2$ pgrep -lf 252727
20089 sleep
-bash-4.2$ 

Eine andere Option besteht darin, automatisch eine Bildschirm- (oder tmux-) Sitzung zu starten, damit Sie nicht vergessen können, eine zu starten, da bereits eine für Sie gestartet wurde, weil Sie die Dinge so eingerichtet haben. Es gibt andere Beiträge an anderer Stelle, wie man das macht.


Linux
  1. So richten Sie die SSH-Anmeldung ohne Passwort ein

  2. Ssh – Wie enteigne ich einen laufenden Prozess und verknüpfe ihn mit einer neuen Bildschirm-Shell?

  3. Ssh – Prozesse weiterlaufen lassen, nachdem die Ssh-Sitzung getrennt wurde?

  4. Wie kann ich die Ausgabe eines laufenden Prozesses in einer anderen Bash-Sitzung anzeigen?

  5. Wie beendet man einen Prozess, der auf einem bestimmten Port in Linux läuft?

So listen Sie laufende Prozesse in Linux auf

Reptyr – Verschieben Sie einen laufenden Prozess von einem Terminal zum anderen, ohne es zu schließen

So beenden Sie den laufenden Linux-Prozess auf einem bestimmten Port

Wie überprüfe ich die Syntax eines Bash-Skripts, ohne es auszuführen?

Wie verbinde ich ein Terminal mit einem getrennten Prozess?

Timeout ohne Killing-Prozess in Bash