Приєднайте сеанс tmux до віддаленої машини


31

Я використовую tmux на своїй локальній машині і, як правило, проводжу кілька сеансів одночасно.

Що я зазвичай роблю, це те, що у мене є сеанс з різними вікнами для локальної роботи, а інші сеанси, в яких я підключаю кілька вікон до одного хоста за сеанс.

Дерево сеансу / вікон виглядатиме так у щоденному використанні, яке я роблю з 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
    \_ ...

Чи є спосіб зробити сеанс 2 та сеанс 3 якимось віддаленим сеансом, підключенням до сеансу tmux, створеного на Somehost & Someotherhost?

Наведене вище дерево виглядатиме так:

(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
    \_ ...

Я знайшов цю тему, але я не впевнений, що це те, що я хочу зробити: чи можливий спільний доступ до сокетів tmux між хостами?

Я думаю, що те, що я шукаю, вимагає від мене тієї ж конфігурації tmux на моїй локальній машині, somehost та someotherhost, але це не буде проблемою.


Ви вирішили вирішити це? Я думаю, що віддалений сеанс, яким ви можете керувати, як це місцевий, - це чудова ідея, але схоже, що відповідь, що найбільше голосує, насправді не є вашим питанням
mbigras

Відповіді:


18

Ви можете передавати команду ssh при підключенні до віддаленого хоста. Включіть -tопцію tmux attach-sessionдля підключення до віддаленого сеансу tmux:

ssh <remote host> -t tmux attach-session

Цей пост про приєднання до tmux сеансу через ssh пояснює його більш докладно.


18
Це не дає вам просто вкладеного сеансу? Я вважаю, що ОП намагається зробити це, щоб віддалений сеанс з'явився поруч з їх локальним сеансом, щоб вони могли переходити в межах одного вибору / дерева-вибору одного tmux.
stsquad

Якщо на віддаленому хості приєднано більше сеансів, ви можете використовувати: ssh <віддалений хост> -t tmux a -t <
ім'я_сесії

Я вніс декілька змін, щоб вирішити проблему, яку я зіткнувся, і поетапно. Сподіваємось, експертна оцінка закінчиться незабаром. Це спрацювало ssh <remote host> -t /path/to/tmux a -t <my-session-name>, потрібна була додаткова-t
Мерлін

У мене те саме питання, що і до ОП. Це не відповідає на моє запитання. Він створює вкладений tmux сеанс, де мені потрібно подвоїти уникнути всіх команд tmux, які я хочу надіслати на цей сеанс. Я хочу щось, де віддалений сеанс відображається в моєму списку сеансів так, як це робив би місцевий сеанс.
всезначний

2

Якщо ваша основна проблема полягає в тому, що вам потрібно вводити ssh remotehostщоразу, коли ви відкриваєте нове вікно, default-commandваріант сеансу може бути вирішенням.

Він автоматично виконує вказану команду, коли ви відкриваєте нові вікна в сеансах, на які ви її встановили.

Просте налаштування в .tmux.conf:

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

Ця прив'язка клавіш Ctrl-rстворює новий сеанс, коли кожне щойно відкрите вікно спочатку виконується ssh remotehostвід вашого імені.

Ви можете вибрати хостів, щоб підключитися під час створення сеансу, налаштувавшись нижче:

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

Цей запитує у вас хоста, який ви хочете зробити sshпри кожному створенні сеансу (не при кожному створенні вікна) і запускає сеанс, присвячений цьому хосту.

sshЯкщо увімкнути мультиплексування SSH у своєму ssh-конфігурації, потрібно небагато часу . .ssh/configПриклад нижче:

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

Зауважте, що ця настройка tmux не створює tmux сеансів у віддалених хостах. Якщо ssh-з'єднання втрачено, пошкоджені програми tmux ніколи не повернуться.


1

Ви можете використовувати такий інструмент, як socat, для тунелю сокета домену unix, який використовує tmux для вашої локальної машини. Але ви насправді просто замінюєте тунель (ssh) на інший (socat), так що це не дуже добре, а також небезпечно.


Можливо, тунель socatнаскрізь ssh? 🙂
всезначний

на даний момент, tmateможливо, буде найкращим інструментом для віддаленої обробки
tmux

0

Якщо ви говорите про віддалену оболонку, ви маєте на увазі, що ви можете виконувати команди там, іншими словами, у вас є прямий доступ. У цьому випадку ви можете просто використовувати sshз'єднання для кожного віддаленого вікна.

Ви можете сказати там щось на кшталт:

"Гей, але немає способу мати кілька вікон для кожного віддаленого сервера!"

і це правда, через ssh обмеження. Але ви можете розпочати сеанс tmux на кожному або віддаленому сервері. ПРИМІТКА: у цьому випадку вам потрібно відновити за замовчуванням Ctrl+bна локальній машині, щоб запобігти зіткненням.

Крім того, я рекомендую вам використовувати tmuxinator, це дуже корисний інструмент, якщо ви відтворюєте свій tmux сеанс хоча б щодня.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.