27

Я использую 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, но это не было бы проблемой.

4 ответа4

18

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

ssh <remote host> -t tmux attach-session

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

1

Если ваша основная проблема заключается в том, что вы должны вводить 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), так что это не очень хорошо, а также небезопасно.

0

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .