Verbinden Sie eine tmux-Sitzung mit einem Remote-Computer

31

Ich verwende tmux auf meinem lokalen Rechner und habe normalerweise mehrere Sitzungen gleichzeitig.

Normalerweise habe ich eine Sitzung mit verschiedenen Fenstern, um lokal zu arbeiten, und die anderen Sitzungen, in denen ich mehrere Fenster mit einem Host pro Sitzung verbinde.

Ein Session / Window Tree würde im täglichen Gebrauch von tmux so aussehen:

(TMUX on my local machine)
 |
 +- session 1: local
 |  \_ window 1: local shell
 |  \_ window 2: local shell
 |  \_ ...
 |
 + session 2: somehost
 |  \_ window1: ssh user@somehost
 |  \_ window2: ssh user@somehost
 |  \_ ...
 |
 + session 3: someotherhost
    \_ window1: ssh user@someotherhost
    \_ window2: ssh user@someotherhost
    \_ ...

Gibt es eine Möglichkeit, Session 2 & Session 3 zu einer Art Fernsitzung zu machen, die eine Verbindung zu einer auf einem & einem anderen Host erstellten tmux-Sitzung herstellt?

Der obige Baum würde so aussehen:

(TMUX on my local machine)
 |
 +- session 1: local
 |  \_ window 1: local shell
 |  \_ window 2: local shell
 |  \_ ...
 |
 + session 2 linked to an existing session on somehost
 |  \_ window1: shell on somehost
 |  \_ window2: shell on somehost
 |  \_ ...
 |
 + session 3 linked to an existing session on someotherhost
    \_ window1: shell on someotherhost
    \_ window2: shell on someotherhost
    \_ ...

Ich habe dieses Thema gefunden, bin mir aber nicht sicher, was ich tun möchte: Ist die gemeinsame Nutzung eines tmux-Sockets zwischen Hosts möglich?

Ich nehme an, was ich suche, würde erfordern, dass ich die gleiche tmux-Konfiguration auf meinem lokalen Rechner habe, irgendwo und irgendwo anders, aber das wäre kein Problem.

lilorox
quelle
Haben Sie eine Problemumgehung dafür gefunden? Ich denke, eine Remote-Sitzung zu haben, die Sie wie eine lokale Sitzung verwalten können, ist eine großartige Idee, aber es sieht so aus, als ob die am höchsten
bewertete

Antworten:

18

Sie können einen Befehl an ssh übergeben, wenn Sie eine Verbindung zu einem Remote-Host herstellen. Fügen Sie die -tOption hinzu, mit der tmux attach-sessioneine Verbindung zur Remote-TMUX-Sitzung hergestellt werden soll:

ssh <remote host> -t tmux attach-session

In diesem Beitrag zum Anhängen an eine tmux-Sitzung über ssh wird dies näher erläutert.

m__
quelle
18
Gibt Ihnen dies nicht nur eine verschachtelte Sitzung? Ich glaube, dass das OP versucht, die Remote-Sitzung neben ihrer lokalen Sitzung anzuzeigen, damit sie innerhalb eines tmux-Auswahlfensters / Auswahlbaums navigieren können.
Stsquad
Wenn mehr als eine Sitzung mit dem Remote-Host verbunden ist, können Sie Folgendes verwenden: ssh <Remote-Host> -t tmux a -t <Sitzungsname>
user1757247
Ich habe einige Änderungen vorgenommen, um ein Problem zu beheben, auf das ich gestoßen bin, und eine schrittweise Anleitung. Wir hoffen, dass der Peer Review bald abgeschlossen ist. Dies funktionierte ssh <remote host> -t /path/to/tmux a -t <my-session-name>, brauchte eine zusätzliche-t
Merlin
Ich habe die gleiche Frage wie das OP. Das beantwortet meine Frage nicht. Es wird eine verschachtelte tmux-Sitzung erstellt, in der alle tmux-Befehle, die an diese Sitzung gesendet werden sollen, doppelt umgangen werden müssen. Ich möchte etwas, bei dem die Remote-Sitzung in meiner Sitzungsliste angezeigt wird, genau wie bei einer lokalen Sitzung.
Omnifarious
1

Sie können ein Tool wie socat verwenden, um den von tmux verwendeten Unix-Domain-Socket auf Ihren lokalen Rechner zu tunneln. Aber Sie tauschen wirklich nur einen Tunnel (ssh) gegen einen anderen (socat) aus, damit es nicht wirklich besser und auch unsicher ist.

untore
quelle
Vielleicht Tunneln socatdurch ssh? 🙂
Omnifarious
an dieser tmatestelle könnte das beste tool für remote tmux handling sein
bis
1

Wenn Ihr Hauptproblem darin besteht, dass Sie bei ssh remotehostjedem Öffnen eines neuen Fensters etwas eingeben müssen, kann die default-commandSitzungsoption eine Problemumgehung sein.

Der von Ihnen angegebene Befehl wird automatisch ausgeführt, wenn Sie in den Sitzungen, für die Sie ihn festgelegt haben, neue Fenster öffnen.

Eine einfache Einstellung in .tmux.conf:

bind-key C-r new-session ssh remotehost \; set-option default-command "ssh remotehost"

Diese Schlüsselbindung Ctrl-rerstellt eine neue Sitzung, in der jedes neu geöffnete Fenster zuerst ssh remotehostfür Sie ausgeführt wird.

Mit den folgenden Einstellungen können Sie Hosts auswählen, die zur Zeit der Sitzungserstellung verbunden werden sollen:

bind-key C-r command-prompt "new-session -s %1 ssh %1 \; set-option default-command \"ssh %1\""

Dieser fragt Sie nach dem Host, den Sie sshbei jeder Sitzungserstellung (nicht bei jeder Fenstererstellung) ausführen möchten, und startet die diesem Host gewidmete Sitzung.

Die Ausführung vieler sshBefehle nimmt nur wenig Zeit in Anspruch, wenn Sie das SSH-Multiplexing in Ihrer ssh-Konfiguration aktivieren. Das .ssh/configBeispiel ist unten:

Host remotehost
    ControlMaster auto
    ControlPath ~/.ssh/mux-%r@%h:%p
    ControlPersist 10

Beachten Sie, dass diese tmux-Einstellung keine tmux-Sitzungen auf Remote-Hosts erstellt. Wenn die ssh-Verbindung unterbrochen wird, kehren die betroffenen tmux-Fenster niemals zurück.

irgendwann
quelle
0

Wenn Sie von Remote-Shell sprechen, meinen Sie, dass Sie dort Befehle ausführen können, dh Sie haben direkten Zugriff. In diesem Fall können Sie die sshVerbindung einfach für jedes Remote-Fenster verwenden.

Sie können dort etwas sagen wie:

"Hey, aber es gibt keine Möglichkeit, mehrere Fenster für jeden Remote-Server zu haben!"

und es ist wahr, aufgrund von SSH-Einschränkungen. Sie können die tmux-Sitzung jedoch auf jedem oder auf Ihrem Remote-Server starten. HINWEIS: In diesem Fall müssen Sie die Standardeinstellung Ctrl+bauf dem lokalen Computer erneut binden , um Kollisionen zu vermeiden.

Auch ich empfehle Ihnen zu verwenden tmuxinator, es ist sehr hilfreich, wenn Sie Ihre tmux-Sitzung mindestens jeden Tag neu erstellen.

outoftime
quelle