Serveur distant, iTerm2 et intégration tmux

30

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.)

Entaille
la source

Réponses:

40

Oui c'est possible, mais assurez-vous:

  • Pour avoir la dernière version de tmux installée à distance
  • Avoir la version la plus récente d'iterm2 installée localement

Connectez-vous via ssh login@hostname -t 'tmux -CC'et voilà - cela devrait ouvrir la fenêtre iTerm2 sur votre boîte locale connectée à la boîte distante.

user2046612
la source
5
n'oubliez pas non plus de vous reconnecter pour utiliser ssh login@hostname -t 'tmux -CC attach'et regardez dans le menu shell-> tmux-> du tableau de bord dans iterm2.
therealmarv
1
Hé, savez-vous comment le faire avec mosh au lieu de ssh? edit: ce n'est pas possible: github.com/mobile-shell/mosh/issues/640
fane89
1
Si vous souhaitez vous connecter et vous attacher à une session spécifique, vous pouvez utiliser ce qui suit:ssh login@hostname -t 'tmux -CC a -t sessionName'
Jeremy Iglehart
une chance de le faire fonctionner avec autossh ou de le faire résister aux déconnexions?
igor
4

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:

  1. Utilisez d'abord .ssh/configsur votre ordinateur local et .ssh/authorized_keyssur 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 faisant ssh pi(en supposant que pic'est le nom d'hôte de votre système distant).

  2. Créez un nouveau profil iTerm2 qui, au lieu de se connecter à votre shell local, appelle uniquement ssh pipour se connecter à la machine distante. Pour configurer cela, allez: Préférences / Profils / + / Command.Command = "ssh pi"

  3. Ouvrez une fenêtre iTerm2 sur la machine distante via votre nouveau profil, en faisant: Profils / Pi.

  4. 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 ESCdans 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.

algue
la source
Pour se connecter automatiquement à une session tmux en cours sur la connexion ssh que j'utilise [[ $- == *i* && $SSH_TTY && -z $TMUX && ! -r ~/.notmux ]] && tmux attach-session && exitdans .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. À exitla fin, la connexion se ferme à la sortie de tmux (surtout un détachement pour moi).
loufoque