Je veux pouvoir démarrer une session tmux sur un serveur distant, puis utiliser les fenêtres natives et les écrans divisés d'iTerm2 sur ma machine locale.
Par exemple, disons que mon serveur distant a une session tmux exécutée avec une fenêtre qui a deux volets. Dans iTerm2 sur ma machine locale, je veux deux volets natifs iTerm2 de sorte que chaque volet contienne un volet tmux différent.
Est-ce possible?
(Je sais que l'inverse est possible - par lequel je peux exécuter une session tmux sur ma machine locale et une autre machine verra mes onglets iTerm2 comme des fenêtres par exemple. Mais cela semble un peu inutile.)
ssh login@hostname -t 'tmux -CC attach'
et regardez dans le menu shell-> tmux-> du tableau de bord dans iterm2.ssh login@hostname -t 'tmux -CC a -t sessionName'
Voici ce qui a fonctionné pour moi, avec les versions stables à partir du 2015-12-16, qui sont iTerm 2.1.4 sur OS X 10.11.2 et tmux 1.9 sur Raspbian Linux:
Utilisez d'abord
.ssh/config
sur votre ordinateur local et.ssh/authorized_keys
sur votre ordinateur distant pour configurer une connexion sans mot de passe au système distant. Une fois que cela est correctement configuré, vous devriez pouvoir vous connecter simplement en faisantssh pi
(en supposant quepi
c'est le nom d'hôte de votre système distant).Créez un nouveau profil iTerm2 qui, au lieu de se connecter à votre shell local, appelle uniquement
ssh pi
pour se connecter à la machine distante. Pour configurer cela, allez: Préférences / Profils / + / Command.Command = "ssh pi"Ouvrez une fenêtre iTerm2 sur la machine distante via votre nouveau profil, en faisant: Profils / Pi.
Dans la fenêtre de connexion à distance iTerm2, à la ligne de commande faire:
tmux -CC
. Après cela, votre fenêtre iTerm2 affiche le mode de commande tmux, tmux crée une nouvelle session et iTerm2 crée immédiatement une nouvelle fenêtre iTerm2 pour cette session tmux. Dans cette nouvelle fenêtre iTerm2, l'onglet initial iTerm2 représente la fenêtre tmux unique de cette session. Si vous faites CMD-T, cela créera un nouvel onglet iTerm2, représentant une nouvelle fenêtre tmux.Comment l'utilisez-vous?
À ce stade, vous pouvez faire "Shell / tmux / Dashboard" afin d'observer la compréhension d'iTerm2 des sessions et fenêtres tmux existantes.
Si vous fermez la fenêtre iTerm2 représentant la session tmux, elle tue la session sous-jacente et toutes ses fenêtres tmux.
Si vous fermez la fenêtre iTerm2 affichant le mode de commande tmux, cela semble simplement tuer l'instance du client tmux qui était connectée à cette session, de sorte que vos deux fenêtres iTerm2 disparaissent, mais la session tmux est toujours en vie et vous pouvez vous reconnecter à il.
Si vous voulez un détachement plus ordonné de tmux, faites-le
ESC
dans la fenêtre du mode de commande tmux.Si au lieu de créer une nouvelle session tmux, ce que vous vouliez à l'origine était de joindre à une session existante, vous pouvez le faire avec
tmux -CC attach
.En théorie, je pense qu'il devrait y avoir un moyen de configurer iTerm2 ou tmux de sorte que lorsque vous vous connectez au système distant, vous êtes automatiquement connecté à une session tmux existante, mais je n'ai pas réussi à le faire fonctionner en modifiant la ligne de commande dans le profil iTerm2.
la source
[[ $- == *i* && $SSH_TTY && -z $TMUX && ! -r ~/.notmux ]] && tmux attach-session && exit
dans .bashrc (ou quelque chose qui s'appelle à partir de là) Les tests sont pour: shell interactif, session ssh, pas déjà en cours d'exécution dans tmux, pas d'urgence-dont-do-it fichier. Àexit
la fin, la connexion se ferme à la sortie de tmux (surtout un détachement pour moi).