Desanexar da sessão local do tmux para anexar ao tmux remoto?

1

Atualmente, minhas novas instâncias do Konsole já estão dentro de uma sessão do tmux, seja nova ou conectada, já que o tmux é incrível e você deve estar sempre dentro do tmux, certo?

No entanto, isso me coloca em uma ligação se eu gostaria de me conectar a uma sessão tmux gerenciada remotamente. Atualmente, sou forçado a planejar antes de abrir uma nova janela do Konsole que esta janela não deve ser gerenciada pelo tmux local, e sim abrir um prompt bash simples do qual eu possa "ssh host_foo -e tmux attach".

Idealmente, gostaria de poder desanexar o processo atual do cliente tmux e continuar automaticamente com a invocação do ssh e do tmux remoto, que seria baseada em qualquer comando emitido a partir da sessão. Espero que a interação funcione da seguinte forma:

[me@local] ~ $ tmux attach
 .... pop into local tmux session ....
[me@local] ~/tmuxdir $ ls
 tmuxfile1 tmuxfile2
[me@local] ~/tmuxdir $ detach-and-ssh foo
 .... pops out of local tmux session ....
 .... and into remote tmux session on host foo ....
[me@foo] ~ $ ls 
 remotefile1 remotefile2
[me@foo] ~ $ tmux detach
 .... pops out of remote tmux session ....
 .... and back into local tmux session ....
[me@local] ~/tmuxdir $ 

Tenho a sensação de que isso poderia ser conseguido escrevendo um script wrapper para chamar "attach do tmux" em primeiro lugar, que procuraria por um comando para chamar de destaque. Isso pode ser gravado em um arquivo pelo script detach-and-ssh. Finalmente, depois que a parte externa do detach-and-ssh (que é apenas ssh) é concluída, o script retorna para o tmux novamente.

Desde que apenas um único comando detach seja executado por vez, um único comando post-detach seria suficiente. No entanto, seria melhor garantir que o script post-detach seja limitado apenas a esse cliente tmux. Se a sessão / cliente tivesse algum conhecimento do PID do wrapper específico, possivelmente via variáveis de ambiente ou alguma outra variável tmux, o comando post-detach poderia ser gravado em um arquivo específico do PID.

Alguém já tentou algo assim e, em caso afirmativo, quais foram as lições aprendidas?

Nota: por favor, não sugira executar todas as janelas de conexão remota no meu tmux local. O tmux local está em um laptop que hiberna e todas as minhas sessões remotas em execução serão perdidas nesse ponto. As sessões remotas realmente precisam ser gerenciadas por um tmux remoto.

Obrigado!

    
por sevrinsky 12.01.2014 / 23:18

1 resposta

1

Como alternativa, você pode aninhar suas sessões tmux. Basta criar uma nova tela no seu tmux local, ssh para o seu foo remoto e anexar à sessão remota do tmux. Desanexar ou matar sua sessão local não matará o remoto.

Nota: Para enviar comandos tmux para a sessão aninhada, pressione Ctrl + B duas vezes (ou n vezes, se você tiver n sessões aninhadas).

    
por 13.01.2014 / 23:30

Tags