2012-05-10 4 views
6

Kann ich tmux lokal ausführen und über ssh mit Remote-Computer verbinden .. und danach alle neuen Fenster und/oder Bildschirm mit der Remote-Maschine-Shell sein ... Was ich ' Ich sage, dass ich tmux nicht auf dem Remote-Rechner installieren kann, aber ich möchte keine ssh-Verbindung von jedem Fenster aus machen, sondern ssh-login nur einmal.Kann tmux-Bereich Remote-SSH-Verbindung

Ist so etwas möglich .. dank

+0

Können Sie installieren tmux in Ihrem Home-Verzeichnis die entfernte Maschine? Ohne tmux bietet ssh Ihnen nur ein einziges Terminal. – chepner

+0

Das ist das Problem, ich kann nichts auf dem Remote-Computer installieren .. Politik – user1019129

Antwort

3

Ich glaube nicht, tmux kann. Eine Problemumgehung wäre, so etwas zu tmux.conf hinzuzufügen.

bind-key X new-window "ssh HOST" 

Dann neue Fenster würden auf der Remote-Host starten.

+0

hmm .. es öffnet ein neues Fenster .. Gibt es eine Möglichkeit, nur den Befehl ohne neues Fenster zu erstellen, aber in der bleiben Fenster Ich habe den Bind-Key-Befehl ausgeführt. run-shell macht das auch nicht. – user1019129

+1

nicht sicher, ich verstehe Ihre Frage, aber 'bind-key X send-key" ssh HOST \ n "' tun, was Sie wollen? – Thor

+1

Art von ja ... :) danke. Übrigens: Es hat das "\ n" nicht ausgeführt .... Ich habe herausgefunden, dass es C-m statt \ n ist – user1019129

5

Wenn Sie nur einmal anmelden möchten, können Sie die Funktion ControlMaster von ssh verwenden. Fügen Sie einige Config wie this zu Ihrem ~/.ssh/config:

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

Wenn Sie auf dem gleichen Server anmelden (als der Benutzer) mehrere Male (entweder in einer tmux oder nicht), ssh wird wieder verwenden die Verbindung, so dass Sie don‘ t müssen Sie die Verbindung herstellen und erneut anmelden.

4

lilydjwg erklärte etwas, das ich vorher nie wirklich verstanden habe. Die Kenntnis der ControlMaster-Einstellung macht das Folgende viel sinnvoller, da es die Herstellung mehrerer ssh-Verbindungen vereinfacht. Sie müssen sich nur einmal authentifizieren, und auf dem Remote-Host muss für jede Verbindung kein sshd-Prozess ausgeführt werden.

In Ihrer .tmux.conf Datei:

# 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 C-h 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 "" 
0

Ich bin mit 1,8 tmux und eine eingebaute in nicht Lösung finden. Diese Abhilfen passen zumindest für meine allgemeine Anwendungsfälle:

  • Erfassung der vollständigen Scheibe Inhalt und die Suche nach dem letzten Befehl ssh darin (ich benutze das Wissen über das Ende meiner Prompt den Befehl mehr oder weniger zuverlässig zu detektieren
  • )
  • Wenn dies nicht gelingt prüfe ich den Befehl das Fenster erstellt wurden, mit möglicherweise unter Verwendung der shell-command Option von tmux new-window oder split-window Befehle

Mein reconnect.sh Skript sieht wie folgt aus. Das dreckigste daran ist, wie man den letzten ssh-Befehl aus dem Puffer holt. Bisher war "> ssh" genug für meine Situationen, um eine Zeile mit einer SSH-Verbindungsanfrage sicher zu erkennen, aber eine bessere Lösung wäre wünschenswert.

#!/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 

gespeichert ich dieses Skript in meinem ~/.tmux Verzeichnis und geänderte Tastenbelegungen für verschiedene split-window und new-window Verknüpfungen in meinem .tmux.conf ähnlich wie diesen:

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