web-dev-qa-db-fra.com

Intégration serveur distant, iTerm2 et tmux

Je souhaite pouvoir démarrer une session tmux sur un serveur distant, puis utiliser les fenêtres natives et les écrans divisés d'iTerm2 sur mon ordinateur local.

Par exemple, supposons que mon serveur distant ait une session tmux s'exécutant avec une fenêtre comportant deux volets. Dans iTerm2 sur mon ordinateur local, je souhaite deux volets iTerm2 natifs, de sorte que chaque volet contient un volet tmux différent.

Est-ce possible?

(Je sais que l'inverse est possible: je peux exécuter une session tmux sur ma machine locale et une autre machine verra mes onglets iTerm2 sous Windows par exemple. Mais cela semble un peu inutile.)

30
Nick

Oui c'est possible, assurez-vous juste:

  • 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à - ceci devrait ouvrir la fenêtre iTerm2 de votre boîte locale connectée à une boîte distante.

40
user2046612

Voici ce qui a fonctionné pour moi, avec les versions stables à partir du 16/12/2015, qui sont iTerm 2.1.4 sur OS X 10.11.2 et tmux 1.9 sur Raspbian Linux:

  1. Commencez par utiliser .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 ceci est correctement configuré, vous devriez pouvoir vous connecter simplement en faisant ssh pi (en supposant que pi est le nom d’hôte de votre système distant).

  2. Créez un nouveau profil iTerm2 qui, au lieu de vous connecter à votre Shell local, appelle uniquement ssh pi pour vous connecter à la machine distante. Pour le configurer, allez dans: Preferences/Profiles/+/Command.Command = "ssh pi"

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

  4. Dans la fenêtre de connexion à distance iTerm2, en ligne de commande, effectuez les opérations suivantes: tmux -CC. Après que 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 iTerm2 initial représente la fenêtre unique tmux de cette session. Si vous utilisez CMD-T, cela créera un nouvel onglet iTerm2, représentant une nouvelle fenêtre tmux.

Comment utilisez-vous cela?

  • À ce stade, vous pouvez utiliser "Shell/tmux/Dashboard" afin de voir comment iTerm2 comprend les sessions et les fenêtres tmux existantes.

  • Si vous fermez la fenêtre iTerm2 représentant la session tmux, la session sous-jacente et toutes les fenêtres tmux sont supprimées.

  • Si vous fermez la fenêtre iTerm2 affichant le mode de commande tmux, il semble alors que l'instance du client tmux qui était connectée à cette session est supprimée. Ainsi, vos fenêtres iTerm2 disparaissent, mais la session tmux est toujours active et vous pouvez vous reconnecter à il.

  • Si vous souhaitez un détachement plus ordonné de tmux, il suffit de faire 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 d’attacher à une session existante, vous pouvez le faire avec tmux -CC attach.

En théorie, je pense qu'il devrait exister un moyen de configurer iTerm2 ou tmux afin que, lorsque vous vous connectez au système distant, vous soyez automatiquement connecté à une session tmux existante, mais je n'ai pas réussi à le faire fonctionner en modifiant la ligne de commande. le profil iTerm2.

4
algal