Dołącz sesję tmux do zdalnego komputera

31

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.

lilorox
źródło
Czy wymyśliłeś obejście tego? Myślę, że zdalna sesja, którą możesz zarządzać lokalnie, to świetny pomysł, ale wygląda na to, że najwyżej głosowana odpowiedź nie jest właściwie twoim pytaniem
mbigras

Odpowiedzi:

18

Możesz przekazać polecenie ssh podczas łączenia się ze zdalnym hostem. Dołącz -topcję z, tmux attach-sessionaby połączyć się ze zdalną sesją tmux:

ssh <remote host> -t tmux attach-session

Ten post na temat dołączania do sesji tmux przez ssh wyjaśnia to bardziej szczegółowo.

m__
źródło
18
Czy to nie daje ci tylko zagnieżdżonej sesji? Uważam, że OP chce, aby sesja zdalna pojawiła się obok sesji lokalnej, aby mogli nawigować w oknie wyboru / drzewa wyboru w jednym oknie Tmux.
stsquad
Jeśli na zdalnym hoście jest podłączonych więcej niż jedna sesja, możesz użyć: ssh <host zdalny> -t tmux a -t <nazwa-sesji>
user1757247
Wprowadziłem kilka zmian w celu rozwiązania napotkanego problemu i krok po kroku. Mamy nadzieję, że wkrótce zakończy się wzajemna ocena. Udało się ssh <remote host> -t /path/to/tmux a -t <my-session-name>, potrzebne dodatkowe-t
Merlin
Mam to samo pytanie co OP. To nie odpowiada na moje pytanie. Tworzy zagnieżdżoną sesję tmux, w której muszę podwójnie uciec od wszystkich poleceń tmux, które chcę wysłać do tej sesji. Chcę czegoś, co sesja zdalna pojawi się na mojej liście sesji, tak jak sesja lokalna.
Wszechobecny
2

Jeśli głównym problemem jest to, że musisz pisać ssh remotehostza każdym razem, gdy otwierasz nowe okno, default-commandopcja 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-rtworzy nową sesję, w której każde nowo otwarte okno najpierw wykonuje ssh remotehostsię 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ć sshprzy każdym tworzeniu sesji (nie przy każdym tworzeniu okna) i rozpoczyna sesję poświęconą temu hostowi.

Wykonanie wielu zajmuje niewiele czasu, sshjeśli włączysz multipleksowanie SSH w konfiguracji ssh. .ssh/configPrzykładzie poniżej:

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

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ą.

więc może
źródło
1

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.

odtąd
źródło
Może tunelowanie socatprzez ssh? 🙂
Wszechobecny
w tym momencie tmatemoże być najlepszym narzędziem do zdalnej obsługi
tmux
0

Jeś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ć sshpołą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+bna komputerze lokalnym, aby uniknąć kolizji.

Polecam również korzystanie tmuxinator, jest to bardzo pomocne narzędzie, jeśli poprawiasz sesję tmux przynajmniej codziennie.

brak czasu
źródło