Używam tmux na mojej lokalnej maszynie i zwykle mam kilka sesji jednocześnie.
Zwykle robię sesję z różnymi oknami do pracy lokalnie oraz inne sesje, w których łączę kilka okien z jednym hostem na sesję.
Drzewo sesji / okien wygląda następująco w codziennym użyciu tmux:
(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
\_ ...
Czy istnieje sposób, aby sesja 2 i sesja 3 były jakimiś zdalnymi sesjami łączącymi się z sesją tmux utworzoną na somehost i somehosthost?
Powyższe drzewo wyglądałoby tak:
(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
\_ ...
Znalazłem ten temat, ale nie jestem pewien, czy to jest to, co chcę zrobić: Czy możliwe jest udostępnianie gniazd Tmux między hostami?
Przypuszczam, że to, czego szukam, wymagałoby ode mnie takiej samej konfiguracji tmux na mojej lokalnej maszynie, somehost i someotherhost, ale to nie byłoby problemem.
Odpowiedzi:
Możesz przekazać polecenie ssh podczas łączenia się ze zdalnym hostem. Dołącz
-t
opcję z,tmux attach-session
aby połączyć się ze zdalną sesją tmux:Ten post na temat dołączania do sesji tmux przez ssh wyjaśnia to bardziej szczegółowo.
źródło
ssh <remote host> -t /path/to/tmux a -t <my-session-name>
, potrzebne dodatkowe-t
Jeśli głównym problemem jest to, że musisz pisać
ssh remotehost
za każdym razem, gdy otwierasz nowe okno,default-command
opcja sesji może być obejściem.Automatycznie wykonuje polecenie określone podczas otwierania nowych okien w ustawionych sesjach.
Proste ustawienie w
.tmux.conf
:bind-key C-r new-session ssh remotehost \; set-option default-command "ssh remotehost"
To powiązanie klawiszy
Ctrl-r
tworzy nową sesję, w której każde nowo otwarte okno najpierw wykonujessh remotehost
się w Twoim imieniu.Możesz wybrać hosty, z którymi chcesz się połączyć podczas tworzenia sesji, korzystając z poniższych ustawień:
bind-key C-r command-prompt "new-session -s %1 ssh %1 \; set-option default-command \"ssh %1\""
Ten pyta hosta, który chcesz zrobić
ssh
przy każdym tworzeniu sesji (nie przy każdym tworzeniu okna) i rozpoczyna sesję poświęconą temu hostowi.Wykonanie wielu zajmuje niewiele czasu,
ssh
jeśli włączysz multipleksowanie SSH w konfiguracji ssh..ssh/config
Przykładzie poniżej:Zauważ, że to ustawienie tmux nie tworzy sesji tmux na zdalnych hostach. Jeśli połączenie ssh zostanie utracone, dotknięte nim okna tmux nigdy nie powrócą.
źródło
Możesz użyć narzędzia takiego jak socat do tunelowania gniazda domeny unix używanego przez tmux na twoim komputerze lokalnym. Ale tak naprawdę zamieniasz tunel (ssh) na inny (socat), więc nie jest tak naprawdę lepszy, a także niepewny.
źródło
socat
przezssh
? 🙂tmate
może być najlepszym narzędziem do zdalnej obsługiJeśli mówisz o zdalnej powłoce, masz na myśli, że możesz tam wykonywać polecenia, innymi słowy, masz bezpośredni dostęp. W takim przypadku możesz po prostu użyć
ssh
połączenia dla każdego zdalnego okna.Możesz powiedzieć coś takiego:
„Hej, ale nie ma możliwości posiadania wielu okien dla każdego zdalnego serwera!”
i to prawda, ze względu na ograniczenia ssh. Możesz jednak rozpocząć sesję tmux na każdym lub zdalnym serwerze. UWAGA: w takim przypadku należy ponownie powiązać domyślną wartość
Ctrl+b
na komputerze lokalnym, aby uniknąć kolizji.Polecam również korzystanie
tmuxinator
, jest to bardzo pomocne narzędzie, jeśli poprawiasz sesję tmux przynajmniej codziennie.źródło