Подключите сеанс 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, но это не было бы проблемой.

lilorox
источник
Вы нашли способ обойти это? Я думаю, что иметь удаленный сеанс, которым вы можете управлять, как локальным, - это
хорошая

Ответы:

18

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

ssh <remote host> -t tmux attach-session

Этот пост о подключении к сеансу tmux через ssh объясняет это более подробно.

m__
источник
18
Разве это не просто вложенная сессия? Я полагаю, что OP пытается сделать так, чтобы удаленный сеанс отображался рядом с их локальным сеансом, чтобы они могли перемещаться внутри одного окна выбора / выбора tmux.
Stsquad
Если к удаленному хосту подключено более одной сессии, вы можете использовать: ssh <удаленный хост> -t tmux a -t <имя-сессии>
user1757247
Я сделал несколько правок, чтобы исправить проблему, с которой столкнулся, и пошагово. Надеюсь, что рецензия скоро закончится. Это сработало 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 никогда не возвращаются.

somay
источник
1

Вы можете использовать такой инструмент, как socat, для туннелирования сокета домена unix, используемого tmux, на вашу локальную машину. Но вы на самом деле просто меняете туннель (ssh) на другой (socat), так что это не очень хорошо, а также небезопасно.

untore
источник
Может быть, socatчерез туннель ssh? 🙂
всевозможный
на данный момент tmateможет быть лучшим инструментом для удаленной обработки tmux
восстановить
0

Если вы говорите об удаленной оболочке, вы имеете в виду, что можете выполнять команды там, другими словами, у вас есть прямой доступ. В этом случае вы можете просто использовать sshсоединение для каждого удаленного окна.

Вы можете сказать там что-то вроде:

«Эй, но нет способа иметь несколько окон для каждого удаленного сервера!»

и это правда, из-за ограничений ssh. Но вы можете запустить сеанс tmux на каждом или на вашем удаленном сервере. ПРИМЕЧАНИЕ: в этом случае вам нужно перепривязать настройки Ctrl+bпо умолчанию на локальном компьютере, чтобы предотвратить конфликты.

Кроме того, я рекомендую вам использовать tmuxinator, это очень полезный инструмент, если вы ректеризуете сеанс tmux хотя бы каждый день.

outoftime
источник