2012-05-10 11 views
6

Czy mogę uruchomić tmux lokalnie i połączyć się przez ssh do zdalnej maszyny .. a potem dowolna nowa szyba i/lub ekran z powłoką zdalnej maszyny ... Co ja ' m mówiąc, że nie mogę zainstalować tmux na zdalnym komputerze, ale nie chcę robić połączenia ssh z każdego panelu, ale ssh-login tylko raz.Czy tmux panel zdalny ssh-connection

takie coś możliwe .. dzięki

+0

można zainstalować tmux w katalogu domowym na zdalna maszyna? Bez tmux ssh oferuje tylko jeden terminal. – chepner

+0

To jest problem, którego nie mogę zainstalować na zdalnej maszynie .. polityka – user1019129

Odpowiedz

3

Nie sądzę tmux puszkę. Jednym obejściem byłoby dodanie czegoś takiego do tmux.conf.

bind-key X new-window "ssh HOST" 

Następnie nowe okna będą uruchamiane na zdalnym hoście.

+0

hmm ... otwiera nowe okno .. Czy istnieje sposób na wykonanie polecenia bez tworzenia nowego okna, ale pozostań w okienko Wykonałem polecenie bind-key. run-shell też tego nie robi. – user1019129

+1

Nie jestem pewien, czy rozumiem twoje pytanie, ale czy "klucz-klucz-klucza X-send" ssh HOST \ n "' czy chcesz, co chcesz? – Thor

+1

rodzaj tak ... :) thanx. Btw: nie wykonał "\ n" .... Znalazłem, że jest to C-m zamiast \ n – user1019129

5

Jeśli chcesz się zalogować tylko raz, możesz użyć funkcji ControlMaster ssh. Dodać trochę config jak this do ~/.ssh/config:

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

Jeśli zalogować się na tym samym serwerze (jako ten sam użytkownik) wiele razy (albo w jednym tmux lub nie), ssh będzie ponowne połączenie tak, że don” t potrzebujesz nawiązać połączenie i zalogować się ponownie.

4

lilydjwg wyjaśnił coś, czego nigdy wcześniej nie rozumiałem. Znajomość ustawienia ControlMaster czyni znacznie bardziej uzasadnioną, ponieważ upraszcza tworzenie wielu połączeń ssh. Wystarczy jeden raz uwierzytelnić, a zdalny host nie musi mieć uruchomionego procesu sshd dla każdego połączenia.

W pliku .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 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

Używam tmux 1.8 i nie znaleźć wbudowany rozwiązanie. Te obejścia zmieścić przynajmniej dla moich typowych przypadków użycia:

  • uchwycić pełną zawartość okienka i szukać ostatniego polecenia ssh w nim (I wykorzystać wiedzę na temat zakończenia moja szybka wykryć polecenie mniej lub bardziej wiarygodnie)
  • Gdybym sprawdzić polecenia szyba może być utworzony z używając opcji tmux new-window lub split-window poleceń

Moja reconnect.sh skrypt wygląda tak shell-command to się nie powiedzie. Najbardziej brzydką rzeczą jest to, jak uzyskać ostatnie polecenie ssh z bufora. Do tej pory "> ssh" wystarczało, aby w moich sytuacjach niezawodnie wykryć linię zawierającą żądanie połączenia ssh, ale byłoby lepsze rozwiązanie.

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

Uratowałem ten skrypt w moim katalogu ~/.tmux i zmienił klawiszy dla różnych split-window i new-window skrótów w moim .tmux.conf podobny do tego:

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