Anexar uma sessão tmux a uma máquina remota

31

Estou usando o tmux na minha máquina local e geralmente tenho várias sessões simultaneamente.

O que geralmente faço é ter uma sessão com janelas diferentes para trabalhar localmente e as outras sessões nas quais conecto várias janelas a um host por sessão.

Uma árvore de sessão / janela ficaria assim no uso diário que faço do 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
    \_ ...

Existe uma maneira de tornar a sessão 2 e a sessão 3 algum tipo de sessão remota conectando-se a uma sessão tmux criada em somehost & someotherhost?

A árvore acima ficaria assim:

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

Encontrei este tópico, mas não tenho certeza se é isso que quero fazer: É possível compartilhar soquetes tmux entre hosts?

Suponho que o que estou procurando exija que eu tenha a mesma configuração tmux na minha máquina local, somehost & someotherhost, mas isso não seria um problema.

lilorox
fonte
Você já descobriu uma solução alternativa para isso? Eu acho que ter uma sessão remota que você pode gerenciar como se fosse local é ótima idéia, mas parece que o mais votado resposta não realmente a sua pergunta
mbigras

Respostas:

18

Você pode passar um comando para o ssh ao se conectar a um host remoto. Inclua a -topção com tmux attach-sessionpara conectar-se à sessão tmux remota:

ssh <remote host> -t tmux attach-session

Este post sobre como conectar a uma sessão do tmux via ssh explica mais detalhadamente.

m__
fonte
18
Isso não fornece apenas uma sessão aninhada? Acredito que o OP está tentando fazer com que a sessão remota apareça ao lado da sessão local para que eles possam navegar na janela de escolha / árvore de escolha de um tmux.
Stsquad
Se houver mais de um sessões ligados ao host remoto que você pode usar: ssh <host remoto> -t tmux um -t <session-name>
user1757247
Fiz algumas edições para corrigir um problema que encontrei e passo a passo. Esperamos que a revisão por pares termine em breve. Isso funcionou ssh <remote host> -t /path/to/tmux a -t <my-session-name>, precisava de um extra-t
Merlin
Eu tenho a mesma pergunta que o OP. Isso não responde à minha pergunta. Ele cria uma sessão tmux aninhada, na qual eu tenho que fazer um escape duplo de todos os comandos do tmux que quero enviar para essa sessão. Quero algo em que a sessão remota apareça na minha lista de sessões, como faria uma sessão local.
Onipresente
2

Se o seu principal problema é que você precisa digitar ssh remotehostsempre que abrir uma nova janela, a default-commandopção da sessão pode ser uma solução alternativa.

Ele executa automaticamente o comando especificado quando você abre novas janelas nas sessões em que o define.

Uma configuração simples em .tmux.conf:

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

Essa ligação de chave Ctrl-rcria uma nova sessão na qual todas as janelas recém-abertas são executadas primeiro ssh remotehostem seu nome.

Você pode escolher hosts para se conectar no momento da criação da sessão com as configurações abaixo:

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

Este pergunta o host que você deseja fazer sshna criação de cada sessão (não na criação de cada janela) e inicia a sessão dedicada a esse host.

Demora pouco tempo para executar muitos sshse você ativar a multiplexação SSH na sua configuração ssh. O .ssh/configexemplo está abaixo:

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

Observe que essa configuração do tmux não cria sessões do tmux em hosts remotos. Se a conexão ssh for perdida, as janelas tmux afetadas nunca retornam.

sombrio
fonte
1

Você pode usar uma ferramenta como socat para encapsular o soquete de domínio unix usado pelo tmux em sua máquina local. Mas você está apenas trocando um túnel (ssh) por outro (socat), para que não seja realmente melhor e também inseguro.

desenterrar
fonte
Talvez socatpor um túnel ssh? 🙂
Onipresente
neste momento, tmatepode ser a melhor ferramenta para manipulação remota do tmux
até
0

Se você está falando sobre shell remoto, quer dizer que pode executar comandos lá, ou seja, você tem acesso direto. Nesse caso, você pode simplesmente usar a sshconexão para cada janela remota.

Você pode dizer algo como:

"Ei, mas não há como ter várias janelas para cada servidor remoto!"

e é verdade, devido a restrições ssh. Mas, você pode iniciar a sessão do tmux em cada um ou em seu servidor remoto. NOTA: nesse caso, é necessário religar o padrão Ctrl+bna máquina local para evitar colisões.

Também recomendo que você use tmuxinator, é uma ferramenta muito útil se você recriar sua sessão do tmux pelo menos todos os dias.

fora do tempo
fonte