Peut tmux pane ssh-connection à distance

Puis-je lancer tmux en local et me connecter via ssh à une machine distante? Après quoi, tout nouveau volet et / ou écran sera associé à la machine distante-shell … Ce que je dis, je ne peux pas installer tmux sur la télécommande machine, mais je ne veux pas faire une connexion ssh à partir de chaque volet, mais ssh-login une seule fois.

Une telle chose est-elle possible .. merci

Si vous souhaitez vous connecter une seule fois, vous pouvez utiliser la fonctionnalité ControlMaster de ssh. Ajoutez une configuration comme celle-ci à votre ~/.ssh/config :

 ControlMaster auto ControlPath /tmp/ssh_mux_%h_%p_%r 

Si vous vous connectez au même serveur (en tant que même utilisateur) plusieurs fois (dans un tmux ou non), ssh réutilisera la connexion pour que vous n’ayez pas besoin de vous connecter et de vous reconnecter.

lilydjwg a expliqué quelque chose que je n’ai jamais vraiment compris auparavant. Connaître le paramètre ControlMaster rend les choses beaucoup plus raisonnables, car cela simplifie la création de plusieurs connexions ssh . Il vous suffit de vous authentifier une seule fois et l’hôte distant n’a pas besoin d’exécuter un processus sshd pour chaque connexion.

Dans votre fichier .tmux.conf :

 # What host do you usually log in to? # We'll ssh there by default each time a new window or pane is opened. REMOTE_HOST=your.usual.host set-option -g default-command "ssh $REMOTE_HOST" # Simple interface to change which host is connected to when you create # a new window or pane. bind-key Ch command-prompt -p "Set remote host: " -I $REMOTE_HOST "set-option default-command 'ssh %%'" # In case you really do want a new window with a local shell. bind-key C new-window "" 

Je ne pense pas que tmux peut. Une solution de contournement serait d’append quelque chose comme ceci au tmux.conf .

 bind-key X new-window "ssh HOST" 

Ensuite, de nouvelles fenêtres commenceraient sur l’hôte distant.

J’utilise tmux 1.8 et je n’ai pas trouvé de solution intégrée. Ces solutions conviennent au moins à mes cas d’utilisation courants:

  • Capturez le contenu complet du volet et recherchez la dernière commande ssh qu’il contient (j’utilise la connaissance de la fin de mon invite pour détecter la commande de manière plus ou moins fiable)
  • Si cela échoue, je vérifie la commande avec laquelle le volet peut avoir été créé en utilisant l’option shell-command tmux new-window ou split-window

Mon script reconnect.sh ressemble à ceci. La chose la plus sale à ce sujet est la façon d’obtenir la dernière commande ssh à partir du tampon. Jusqu’à présent, “> ssh” était suffisant pour détecter de manière fiable une ligne contenant une demande de connexion ssh, mais une meilleure solution serait appréciée.

 #!/bin/bash # @TODO: change this according to your own prompt # This is used to find lines connect ssh command in the pane buffer PROMPT_SEPARATOR="> " # get current pane buffer size and dimensions HISTORY_LIMIT=`tmux display-message -p "#{history_limit}"` VISIBLE_LINES=`tmux display-message -p "#{pane_height}"` # search last ssh command in pane content LINE=`tmux capture-pane -p -J -S -$HISTORY_LIMIT -E $VISIBLE_LINES | grep "${PROMPT_SEPARATOR}ssh " | tail -1` if [ -n "$LINE" ]; then echo $LINE | sed "s/.*$PROMPT_SEPARATOR//;" else # fall back to the command that might have been used to create the pane # (not necessarily ssh but helpful anyway) tmux list-panes -F "#{pane_active} #{pane_start_command}" | grep "^1 " | tail -1 | cut -d ' ' -f2- fi 

J’ai sauvegardé ce script dans mon répertoire ~ / .tmux et j’ai modifié les raccourcis clavier pour différents raccourcis de new-window split-window et de new-window dans mon .tmux.conf comme ceci:

 # try to reconnect to remote host when creating new window bind c run-shell 'CMD=`~/.tmux/reconnect.sh`; tmux new-window "$CMD"'