Teilen Sie lokale und Remote-TMXX-Sitzungen

7

Es scheint viele verwandte Fragen zu geben, aber ich würde gerne eine bestimmte Problemumgehung sehen.

Also, habe ich einen begeisterten iTerm2 Benutzer sein (irrelevant) und ich begann remote über tmux weil ich SSH - Timeouts vermeiden will , das heißt mein Hauptanliegen ist , dass sollte eine nukleare Apokalypse meinen Laptop zerstört ich auf dem Remote - Server abholen kann , von wo aus Ich habe aufgehört.

Jetzt benutze ich es auch lokal. Gibt es eine Möglichkeit, die beiden Dinge sauber zu mischen? Ich sehe nur zwei Möglichkeiten.

  • tmux auf dem lokalen und dem Remote-Computer (dies ist mein aktueller). Die Sitzungen sind völlig unabhängig. Wenn meine lokale Sitzung abstürzt, überlebt die entfernte Sitzung usw.; Leider kann es keine Interaktion geben, daher muss ich vergessen, den Copy-Paste-Verlauf (korrigieren Sie mich, wenn ich falsch liege) und ähnliche Dinge beizubehalten.
  • ssh vom lokalen tmux und an einen entfernten tmux anschließen. Auf diese Weise habe ich eine Remote-tmux-Sitzung in einem lokalen tmux-Fenster, deren tägliche Verwendung äußerst umständlich erscheint.

Das Problem ist also hauptsächlich, dass ich meinen Kuchen will und ihn auch esse. Ich möchte meine Arbeit an der SSH-Verbindung (und den darin enthaltenen Multitasking-Aufgaben, solange sie noch aktiv ist) beibehalten, aber ich möchte meine Arbeit auch auf alle meine tmux-Bereiche verteilen, unabhängig davon, ob sie lokal oder remote sind. Ist es möglich?

marco
quelle

Antworten:

2

Mein Rat:

Verwenden Sie moshdiese Option , um nach dem Start der Sitzung eine Verbindung zum Remote-Server herzustellentmux

mosh wurde für das übliche, aber weniger apokalyptische Szenario einer Remote-Sitzung entwickelt, die über eine zellulare Datenverbindung verbunden ist, bevor 3G überhaupt eine Sache war.

Von der moshManpage:

mosh (Mobile Shell) ist eine Remote-Terminal-Anwendung, die intermittierende Konnektivität unterstützt, Roaming ermöglicht und spekulatives lokales Echo und Zeilenbearbeitung von Benutzertastenanschlägen bietet.

Im Vergleich zu ssh ist mosh robuster - seine Verbindungen bleiben über den Ruhezustand und Änderungen der IP-Adresse des Clients erhalten - und reaktionsschneller, da das Protokoll Paketverlust toleriert und der Client die meisten Tastenanschläge sofort wiedergeben kann, ohne auf eine Netzwerkrunde zu warten -Ausflug.

mosh verwendet ssh, um eine Verbindung zum Remote-Host herzustellen und sich mit vorhandenen Mitteln (z. B. Authentifizierung mit öffentlichem Schlüssel oder einem Kennwort) zu authentifizieren. mosh führt das nicht privilegierte Mosh-Server-Hilfsprogramm auf dem Server aus, schließt dann die SSH-Verbindung und startet den mosh-Client, der eine langlebige Datagrammverbindung über UDP herstellt.

Damals, als Sie sich mit Ihrem Laptop bei Ihrem SSH-Server angemeldet haben, beispielsweise in einem Nahverkehrszug, mit einem CDMA- PC- Kartenmodem auf Ihrer blendend schnellen Compaq Armada (Omg Pentium!) Oder mit einer Seriennummer Kabel, um das Palm VII- Ding anzuschließen, das eine Art Datendienst hatte; Sie würden Ihre Sitzung jedes Mal trennen, wenn Sie von einer Funkzelle zur nächsten wechseln, was in einem Nahverkehrszug alle 3 bis 5 Minuten sein könnte.

Das wäre aus der Sicht der Verbindung ein äquivalentes Szenario zu der alten Sowjetunion, die Plutonium entlang der Bahnstrecke regnet ...

also moshzur Rettung. Zur Authentifizierung wird ssh verwendet, der Rest der Sitzung wird jedoch vom Mosh-Tunnel verwaltet, der speziell für die Ausfallsicherheit von Sitzungen bei flockigen Links entwickelt wurde.

Aus der Sicht eines Benutzers ist dies heutzutage nicht mehr wahrnehmbar. Ich benutze es immer noch, um ssh, äh ... mosh von meinem Android-Gerät aus zu verwenden termux, obwohl die Links auf 4G dieses Problem nicht mehr haben.

Ein weiterer häufiger Anwendungsfall waren SSH-Verbindungen über flockige Modemverbindungen über POTS, die die Sitzung abbrachen, wenn Ihre Schwester beschloss, ihren Freund anzurufen, und das andere FESTE Telefon im Haus abnahm , obwohl Sie sie gewarnt hatten, dass Sie dies tun würden Laden Sie das neue Album von U2 im MP3-Format von einer schattigen WaReZ-Site herunter.

Wenn Sie dies verwenden möchten, installieren Sie mosh mithilfe des Paketmanagers Ihrer Distribution sowohl auf dem Server als auch auf dem Client (es wird auch kein Root benötigt, es wird eine Userland-Installation durchgeführt, wenn kein Root verfügbar ist, praktisch für Android-Geräte) und dann ::

terminus:~>> mosh trantor.mydoman.tld tmux
Last login: Wed Apr  4 21:27:38 2018 from XX.XXX.XXX.XXX
trantor:~>> 

Genießen! =)

hlecuanda
quelle
1
Nicht wirklich das, wonach ich gesucht habe, aber wenn ich das Kopfgeld nicht vergebe, geht es verloren! Weder dies noch die Antwort von Timmy Browne haben die Frage wirklich beantwortet, sodass Sie Kopfgeld erhalten, da Sie weniger Ruf haben :) Vielen Dank für die Antwort.
Simon D
Übrigens war ich noch nie in der Lage, Mosh zum Laufen zu bringen - möglicherweise NAT-bezogen wie unter github.com/mobile-shell/mosh/issues/623
Simon D
Vielen Dank! Als ich Ihre Frage erneut las, konnte ich die Anforderung der erneuten Verbindung mit einem anderen Gerät nicht abstrahieren, wenn Ihre Sitzung unterbrochen wurde. (Weiterleiten). Mein Vorschlag wird Sie auf halbem oder sogar 3/4 des Weges zur Lösung dorthin bringen, da mosh auch nach dem Schlafengehen eine Sitzung bestehen lässt oder die IP-Adresse geändert wird (übrigens keine Kleinigkeit), die Sitzung jedoch herunterfahren oder wieder aufnehmen kann Bei einem anderen Gerät ist dies nicht ausreichend, hauptsächlich aufgrund von Verschlüsselungsproblemen. Termux auf dem Server gibt dem Benutzer jedoch den Anschein einer "Übergabe", während die zugrunde liegenden Sitzungen unterschiedlich sind.
Hlecuanda
Wie Sie bereits erwähnt haben, ist Mosh auch in Bezug auf seine Ports wählerisch. Ich habe dieses Problem gelöst, indem ich die Eingangs- und Ausgangsseite des Ports auf einem einzelnen UDP-Port weiterleitete (60000 ist eine gute Standardauswahl) und beim Verbinden die Option -p verwendete, andernfalls wird ein zufälliger Port im Bereich von 60000 bis 61000 verwendet Dies ist eine riesige Angriffsfläche, die auf einer Firewall dauerhaft offen bleibt. (Es war eine andere Zeit, als Mosh mosh -p 60000 trantor.domain.tld tmux
gezeugt
1
Ich denke, das Problem, das ich mit mosh habe, ist wahrscheinlich, dass udp-Pakete nicht über Router weitergeleitet werden, die ich nicht kontrolliere, die ich aber weiter untersuchen muss. Ich habe den Bereich 60000-61000 auf Client- und Server-Firewalls ohne Glück geöffnet. Ich mache mir keine allzu großen Sorgen über das Wechseln von Geräten auf der Clientseite, möchte aber lieber Verbindungen aufrechterhalten, wenn mein Gerät eine Verbindung aus verschiedenen Netzwerken herstellt oder wenn Sie schlafen und wieder aufwachen.
Simon D
1

Würde das Teilen von Fenstern helfen?

tmux new-session -s shared "tmux new-window -n CoolName"
tmux link-window -s <src-window> -t <dst-window>
tmux link-window -s shared:CoolName -t $index#  (target is optional)
Timmy Browne
quelle
Ich glaube nicht, dass dies funktioniert, da die lokale Sitzung nicht mit der Remote-Sitzung geteilt werden kann. Sieht aus wie github.com/tmux/tmux/issues/204 schlägt dies nicht möglich ist. github.com/yudai/sshh bietet auch einige Funktionen zum Duplizieren von SSH-Sitzungen über TMX-Bereiche hinweg. Dies gilt jedoch nicht für das Kombinieren lokaler und Remote-SSH-Sitzungen. tmate.io sieht nach einer Möglichkeit aus. Danke für den Vorschlag.
Simon D
0

Unter https://medium.freecodecamp.org/tmux-in-practice-local-and-nested-remote-tmux-sessions-4f7ba5db8795 finden Sie einige Ideen, wie dies in tmux durchgeführt werden kann. Verwenden Sie grundsätzlich eine Taste, um den Zugriff auf den inneren tmux umzuschalten.

Die Konfiguration, die für mich funktioniert hat, war die unter http://stahlke.org/dan/tmux-nested/ :

unbind C-b
set -g prefix C-a

set -g status-bg colour40
setw -g window-status-current-bg colour40

bind -n C-t new-window -a
bind -n S-left  prev
bind -n S-right next
bind -n S-C-left  swap-window -t -1
bind -n S-C-right swap-window -t +1

bind -n M-F11 set -qg status-bg colour25
bind -n M-F12 set -qg status-bg colour40
bind -n S-up \
    send-keys M-F12 \; \
    set -qg status-bg colour25 \; \
    unbind -n S-left \; \
    unbind -n S-right \; \
    unbind -n S-C-left \; \
    unbind -n S-C-right \; \
    unbind -n C-t \; \
    set -qg prefix C-b
bind -n S-down \
    send-keys M-F11 \; \
    set -qg status-bg colour40 \; \
    bind -n S-left  prev \; \
    bind -n S-right next \; \
    bind -n S-C-left swap-window -t -1 \; \
    bind -n S-C-right swap-window -t +1 \; \
    bind -n C-t new-window -a -c "#{pane_current_path}" \; \
    set -qg prefix C-a
Simon D.
quelle