Wie kann ich ein Terminalfenster aus der Ferne betrachten?

8

Ich habe das Büro früher mit einem aktiven Terminalfenster verlassen, in dem ein Skript auf einem Centos 7-Server ausgeführt wird. Jetzt habe ich SSHing von zu Hause aus und ich möchte sehen, wo es hin muss. Ist das möglich? Kann ich von hier aus wieder zum selben Terminalfenster wechseln?

samerivertwice
quelle
Mögliches Duplikat: unix.stackexchange.com/questions/367370/…
Jakuje
Ich möchte auch tmate.io zu allen Antworten unten
hinzufügen
Eine Option ist: strace -e write -p 12345(Ersetzen Sie die PID des Prozesses, an dem Sie interessiert sind). Eine andere Option ist: strace -e read -p 12345(Ersetzen Sie die PID des Terminalemulators). Im Prinzip wäre es möglich, ein Programm zu schreiben, um den ptraceSystemaufruf zu verwenden, um die Informationen auf die gleiche Weise zu sammeln strace, und sie direkt auf sein eigenes Terminal zu schreiben. Ich weiß nicht, ob ein solches Programm existiert, aber es würde die in Ihrer Frage angegebenen Anforderungen abdecken.
Kasperd
Auf eine mögliche Weise können Sie RPC (Remote Procedure Calls) auf dem Zielcomputer aktivieren und dann (remote) eine Verbindung zum Bildschirm herstellen und diesen steuern, einschließlich einzelner Fenster. Hinweis: Dies öffnet eine Sicherheitsanfälligkeit. Deaktivieren Sie daher RPC, wenn Sie fertig sind.
user3629249

Antworten:

14

Wie bereits erwähnt, ist die beste Option die Verwendung von screenoder tmux. Dies sind Werkzeuge, die als "Terminal-Multiplexer" bekannt sind. Mit ihnen können Sie Shell-Sitzungen erstellen, die an tatsächliche Anmeldungen angehängt und von diesen getrennt werden können. Diese Tools sind nicht nur nützlich, um Ihre Arbeit von einem anderen Terminal aus zu überprüfen, sondern bieten auch andere Funktionen, z. B. die Freigabe Ihrer Sitzung für einen anderen Benutzer und die Sicherstellung, dass Ihr Befehl nicht beendet wird, wenn Sie Ihre Internetverbindung verlieren. Wenn Sie suchen screen, können Sie versuchen, nach "GNU Screen" zu suchen. Beide Tools sind auf den meisten Linux-Systemen verfügbar.

Normalerweise starten Sie die Sitzung und führen dann Ihren Befehl innerhalb dieser Sitzung aus. Wenn Sie den Befehl jedoch bereits gestartet haben, möchten Sie möglicherweise einen Artikel zum Verschieben eines laufenden Befehls in eine Bildschirmsitzung nachschlagen. Ich würde jedoch nicht empfehlen, dies beim ersten Mal an etwas Wichtigem auszuprobieren. Diese Frage kann von Nutzen sein:

Verschieben eines bereits laufenden Prozesses auf Bildschirm

Wenn Sie nur überprüfen möchten, ob der Prozess ausgeführt wird, ist strace mein Lieblingswerkzeug. Mit diesem Tool können Sie jeden Kernelaufruf anzeigen, der von einem Prozess ausgeführt wird. Es kann einige Fähigkeiten erfordern, um die Ausgabe zu verstehen, aber es sollte Ihnen zumindest eine Vorstellung davon geben, ob der Prozess ausgeführt wird, und wenn Sie genau genug hinschauen, werden möglicherweise die Dateinamen abgefangen, die er öffnet. Um dies zu tun, suchen Sie zuerst die PID, möglicherweise durch Durchsuchen ps aux|grep yourcommand, und dann:

strace -fp YOUR_PID

Sie können ^ C, um da rauszukommen. Möglicherweise können Sie keine erneute Verbindung herstellen, aber wenn Sie nur wissen möchten, was es tut, sollte dies ausreichen.

DKing
quelle
Warum können Sie es nicht erneut anhängen?
HSchmale
@HSchmale Ich bin mir nicht sicher, ob ich deine Frage verstehe. Wenn Sie sich auf strace beziehen, gibt Ihnen dieses Programm überhaupt kein Terminal. Es zeigt Ihnen nur die Kernelaufrufe, die ausgeführt werden. Wenn ich vermute, dass ein Prozess hängen bleibt, hat mir strace oft die genauen Dateien gezeigt, an denen er gerade arbeitet, sodass ich weiß, wo er sich befindet und dass er nicht hängt.
DKing
Es war eine Fehlinterpretation von mir. Ich dachte, Sie könnten sich nicht wieder daran befestigen, aber Sie wollten ein Terminal wieder daran befestigen.
HSchmale
9

Ein Weg, dies zu tun: TMUX

Wie in den meisten Antworten bereits erwähnt, verwenden Sie tmux(oder screen) den Befehl, wenn er sich in einer vorhandenen SSH-Sitzung befindet

tmux

Sie befinden sich jetzt in einer neuen Bash-Sitzung, in der Sie Ihr Programm / Ihren Befehl starten können. Sie können es jederzeit schließen (jedoch nicht mit STRG + D, sondern durch Schließen des Fensters) und später zurückkehren, indem Sie eine SSH-Verbindung zu demselben Benutzer auf demselben Computer herstellen und den Befehl schreiben

tmux attach

Sie können auch mehrere tmux Sitzungen abhalten, indem Sie ihnen Namen geben

tmux new -s myname

Sie können eine Liste aller offenen tmuxSitzungen für Ihren Benutzer mit anzeigen

tmux ls

und an eine benannte tmuxSitzung mit anhängen

tmux a -t myname

Finden Sie ein umfassendes tmux cheat sheet hier .

Für ein laufendes Programm

Die bisherigen Antworten scheinen sich der Tatsache nicht bewusst zu sein, dass Sie einen bereits laufenden Prozess auf einen anderen verschieben können tmux/ screenwie diese Antwort zeigt. Das Programm, das den Job erledigt, heißt reptyrund unter Ubuntu / Debian können Sie es mit einem einfachen installieren

sudo apt-get install reptyr

Ermitteln Sie anschließend die Prozess-ID Ihres laufenden Programms (z. B. mit topoder htop), starten Sie eine tmuxSitzung und eine einfache

reptyr PID

verbindet den laufenden Prozess erneut mit Ihrer tmuxBash-Sitzung.

Manu CJ
quelle
5

In Zukunft können Sie screenoder tmuxund können dann eine laufende Sitzung erneut zuordnen.

Sven
quelle
3

Ich habe Byobu benutzt und finde es unglaublich mächtig. Byobu ist ein textbasierter GPLv3-Open-Source-Fenstermanager und Terminal-Multiplexer.

Sie können also eine Byobu-Sitzung eröffnen, indem Sie einfach "Byobu" eingeben. Anschließend können Sie mit Strg + F2 eine neue Registerkarte erstellen und zwischen den Registerkarten mit Strg + F3 für Zurück und Strg + F4 für Vorwärts wechseln. Sie können eine Registerkarte mit Strg + F6 schließen oder mit Umschalt + F6 von einer Sitzung trennen. Sie können die Sitzung später erneut verbinden, indem Sie einfach erneut "byobu" eingeben.

Byobu unterstützt vertikale und horizontale Teilungen, unter anderem Vollbild. Es ist unter Ubuntu / Debian, CentOS / Fedora / RedHat und FreeBSD verfügbar.

David Okwii
quelle
Scheint ein wenig irreführend, byobu einen Terminal-Multiplexer zu nennen. Es ist wirklich nur ein Front-End für tmuxund screenviele finden eine bessere Benutzererfahrung als sie es sofort tun.
B-Schicht
2

Wie bereits erwähnt, empfehle ich die Verwendung von tmuxoder screenin der Zukunft, aber das funktioniert nur, wenn Sie vorher darüber nachgedacht haben.

Ich war schon einige Male in deiner Situation. Wenn sich das Terminal, das Sie ausgeführt haben, auf Ihrem Office-Desktop-PC befand, können Sie SSH in Ihren PC einbinden und einen VNC-Server starten. Auf diese Weise können Sie zumindest das offene Terminal überprüfen.

Pablo Montepagano
quelle
0

Wie bereits erwähnt, kann tmux verwendet werden. Bildschirm ist nicht nützlich, wenn Sie den Bildschirm für mehrere Personen freigeben möchten.

Vor allem empfehle ich jedem, https://tmate.io/ auszuprobieren, um temporären Zugriff zu gewähren, auch auf localmachine. tmate unterstützt alle oben genannten :)

https://tmate.io/

Anto
quelle