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.