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.
Respostas:
Você pode passar um comando para o ssh ao se conectar a um host remoto. Inclua a
-t
opção comtmux attach-session
para conectar-se à sessão tmux remota:Este post sobre como conectar a uma sessão do tmux via ssh explica mais detalhadamente.
fonte
ssh <remote host> -t /path/to/tmux a -t <my-session-name>
, precisava de um extra-t
Se o seu principal problema é que você precisa digitar
ssh remotehost
sempre que abrir uma nova janela, adefault-command
opçã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-r
cria uma nova sessão na qual todas as janelas recém-abertas são executadas primeirossh remotehost
em 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
ssh
na 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
ssh
se você ativar a multiplexação SSH na sua configuração ssh. O.ssh/config
exemplo está abaixo: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.
fonte
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.
fonte
socat
por um túnelssh
? 🙂tmate
pode ser a melhor ferramenta para manipulação remota do tmuxSe 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
ssh
conexã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+b
na 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.fonte