2012-05-10 3 views
6

Могу ли я запускать tmux локально и подключаться через ssh к удаленной машине .. и после этого любая новая панель и/или экран будет с удаленной машиной-оболочкой ... Что я ' m говорит, что я не могу установить tmux на удаленную машину, но я не хочу делать ssh-соединение с каждой панели, но ssh-login только один раз.Can tmux pane remote ssh-connection

ли такая вещь возможно .. благодаря

+0

Вы можете установить tmux в вашей домашней директории на удаленная машина? Без tmux ssh предоставляет только один терминал. – chepner

+0

Вот в чем проблема: я ничего не могу установить на удаленном компьютере .. политика – user1019129

ответ

3

Я не думаю, что tmux может. Одним из способов было бы добавить что-то вроде этого: tmux.conf.

bind-key X new-window "ssh HOST" 

Затем на удаленном хосте будут открываться новые окна.

+0

hmm .. он открывает новое окно .. Есть ли способ просто запустить команду без создания нового окна, но оставайтесь в Я выполнил команду bind-key-command. run-shell тоже этого не делает. – user1019129

+1

не уверен, что я понимаю ваш вопрос, но «связывает-ключ X send-key» ssh HOST \ n "' делает то, что вы хотите? – Thor

+1

вид да ... :) thanx. Btw: он не выполнил «\ n» .... Я нашел, что это C-m вместо \ n – user1019129

5

Если вы хотите войти в систему только один раз, вы можете использовать функцию 0sh. Добавьте конфиг как this к вашему ~/.ssh/config:

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

Если при входе на тот же сервер (как тот же пользователь) несколько раз (или в одном tmux или нет), SSH будет повторно использовать соединение, так что вы не» t нужно снова подключиться и войти в систему.

4

lilydjwg объяснил то, что я никогда не понимал раньше. Знание о настройке ControlMaster делает следующее гораздо более разумным, так как упрощает создание нескольких соединений ssh. Вам нужно только один раз выполнить аутентификацию, а удаленному хосту не нужно запускать процесс sshd для каждого подключения.

В файле .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

Я использую tmux 1.8 и не нашли встроенное решение. Эти обходные подходят по крайней мере, для моих частых случаев применения:

  • Capture полного содержимого панели и поиск последней команды SSH в нем (я использую знание об окончании моей подсказки, чтобы обнаружить команду более или менее надежно)
  • Если это не удается проверить команду на панели может быть создана с помощью shell-command варианта tmux new-window или split-window команд

Моего reconnect.sh сценарий выглядит следующим образом. Самое грязное в этом - это способ получить последнюю команду ssh из буфера. До сих пор «> ssh» было достаточно для того, чтобы мои ситуации надежно обнаруживали строку, содержащую запрос на соединение ssh, но любое лучшее решение было бы оценено.

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

Я сохранил этот сценарий в моем ~/.tmux каталог и измененные комбинации клавиш для различных split-window и new-window ярлыков в моем .tmux.conf похож на это:

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

 Смежные вопросы

  • Нет связанных вопросов^_^