2012-05-10 35 views
6

Tôi có thể chạy tmux cục bộ và kết nối qua ssh với máy từ xa .. và sau đó bất kỳ ngăn và/hoặc màn hình mới nào có với vỏ máy từ xa ... Điều tôi ' m nói rằng tôi không thể cài đặt tmux trên máy từ xa, nhưng tôi không muốn làm một kết nối ssh từ mỗi cửa sổ, nhưng ssh-đăng nhập chỉ một lần.Có thể tmux ngăn kết nối ssh từ xa

là điều như vậy càng tốt .. nhờ

+0

Bạn có thể cài đặt tmux trong thư mục chính của bạn trên máy từ xa? Nếu không có tmux, ssh chỉ cung cấp cho bạn một thiết bị đầu cuối duy nhất. – chepner

+0

Đó là vấn đề tôi không thể cài đặt bất cứ điều gì trên máy từ xa .. chính sách – user1019129

Trả lời

3

Tôi không nghĩ tmux lon. Một cách giải quyết khác là thêm một cái gì đó như thế này vào tmux.conf.

bind-key X new-window "ssh HOST" 

Sau đó, cửa sổ mới sẽ bắt đầu ở máy chủ từ xa.

+0

hmm .. nó mở ra một cửa sổ mới .. Có cách nào để chỉ chạy lệnh w/o tạo cửa sổ mới, nhưng ở lại trong pane Tôi thực thi lệnh bind-key-command. run-shell cũng không làm điều đó. – user1019129

+1

không chắc chắn tôi hiểu câu hỏi của bạn, nhưng không 'bind-key X gửi-key" ssh HOST \ n "' làm những gì bạn muốn? – Thor

+1

loại yeah ... :) thanx. Btw: nó không thực thi "\ n" .... Tôi thấy nó là C-m thay vì \ n – user1019129

5

Nếu bạn muốn đăng nhập chỉ một lần, bạn có thể sử dụng tính năng ControlMaster của ssh. Thêm một số cấu hình như this-~/.ssh/config của bạn:

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

Nếu bạn đăng nhập vào cùng một máy chủ (như cùng một người dùng) nhiều lần (hoặc trong một tmux hay không), ssh sẽ tái sử dụng các kết nối để bạn don' t cần phải thực hiện kết nối và đăng nhập lại.

4

lilydjwg đã giải thích điều tôi chưa bao giờ thực sự hiểu trước đây. Việc biết về cài đặt ControlMaster làm cho điều sau hợp lý hơn nhiều, vì nó đơn giản hóa việc thực hiện nhiều kết nối ssh. Bạn chỉ cần xác thực một lần và máy chủ từ xa không cần phải có quá trình sshd chạy cho mỗi kết nối.

Trong file .tmux.conf của bạn:

# 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

Tôi đang sử dụng tmux 1.8 và không tìm thấy một giải pháp tích hợp. Những cách giải quyết này phù hợp ít nhất cho các trường hợp sử dụng phổ biến của tôi:

  • Ghi lại toàn bộ nội dung của cửa sổ và tìm lệnh ssh cuối cùng trong đó (Tôi sử dụng kiến ​​thức về kết thúc lời nhắc của mình để phát hiện lệnh ít hoặc đáng tin cậy hơn))
  • Nếu đây thất bại tôi kiểm tra lệnh cửa sổ có thể đã được tạo ra với bằng shell-command tùy chọn tmux new-window hoặc split-window lệnh

reconnect.sh kịch bản của tôi trông như thế này. Điều bẩn nhất về nó là cách để có được lệnh ssh cuối cùng từ bộ đệm. Đến nay "> ssh" là đủ cho các tình huống của tôi để phát hiện một cách đáng tin cậy một dòng có chứa một yêu cầu kết nối ssh nhưng bất kỳ giải pháp tốt hơn sẽ được đánh giá cao.

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

tôi cứu kịch bản này trong tôi ~/.tmux thư mục và thay đổi tổ hợp phím cho nhiều split-windownew-window phím tắt trong tôi .tmux.conf tương tự như sau:

# try to reconnect to remote host when creating new window 
bind c run-shell 'CMD=`~/.tmux/reconnect.sh`; tmux new-window "$CMD"' 
Các vấn đề liên quan