Détacher de la session tmux locale pour l'attacher à tmux distant?

1

Mes nouvelles instances de Konsole apparaissent déjà dans une session tmux, qu'elles soient nouvelles ou associées, car tmux est génial et vous devriez toujours être à l'intérieur de tmux, n'est-ce pas?

Cependant, cela me met dans une impasse si je souhaite me connecter à une session tmux gérée à distance. À l'heure actuelle, je suis obligé de planifier avant d'ouvrir une nouvelle fenêtre Konsole que cette fenêtre ne soit pas gérée par tmux local, et d'ouvrir plutôt une invite simple bash à partir de laquelle je peux "ssh host_foo -e tmux attach".

Idéalement, j'aimerais pouvoir détacher le processus client tmux actuel et continuer automatiquement à l'invocation ssh et tmux à distance, qui serait basée sur toute commande émise à partir de la session. Je m'attends à ce que l'interaction fonctionne comme suit:

[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 $ 

J'ai le sentiment que cela pourrait être réalisé en écrivant un script wrapper appelant «tmux attach» en premier lieu, qui chercherait une commande à appeler détachée. Cela pourrait être écrit dans un fichier par le script detach-and-ssh. Enfin, une fois que la partie externe de detach-and-ssh (qui est simplement ssh) est terminée, le script effectue une boucle en boucle pour que tmux s'attache à nouveau.

Tant qu'une seule commande de détachement est exécutée à la fois, une seule commande de post-détachement suffit. Cependant, il serait préférable de s’assurer que le script post-détaché est limité à ce client tmux uniquement. Si la session / le client connaissait le PID du wrapper spécifique, éventuellement via des variables d'environnement ou une autre variable tmux, la commande post-detach pourrait être écrite dans un fichier spécifique au PID.

Quelqu'un at-il essayé quelque chose comme ça, et si oui, quelles ont été les leçons apprises?

Note: s'il vous plaît faire ne pas suggère d'exécuter toutes les fenêtres de connexion à distance sous mon tmux local. Le tmux local se trouve sur un ordinateur portable en veille prolongée et toutes mes sessions distantes en cours d’exécution seront perdues à ce stade. Les sessions distantes doivent vraiment être gérées par un tmux distant.

Merci!

sevrinsky
la source

Réponses:

1

Alternativement, vous pouvez imbriquer vos sessions tmux. Créez simplement un nouvel écran dans votre tmux local, ssh sur votre télécommande foo et attachez-le à la session tmux distante. Détacher ou tuer votre session locale ne tuera pas la session distante.

Remarque: Pour envoyer des commandes tmux à la session imbriquée, appuyez sur Ctrl + B deux fois (ou n fois, si vous avez n sessions imbriquées).

Likeyn
la source