我可以在本地运行tmux并通过ssh连接到远程机器..之后任何新的窗格和/或屏幕都与远程机器shell一起... 我所说的我无法在远程计算机上安装tmux,但我不希望从每个窗格进行ssh连接,只需要ssh-login一次。
这样的事情可能吗? 感谢
答案 0 :(得分:5)
如果您只想登录一次,则可以使用ssh的ControlMaster
功能。将this之类的配置添加到~/.ssh/config
:
ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r
如果您多次登录同一服务器(作为同一用户)(无论是否在一个tmux中),ssh将重用该连接,这样您就不需要连接并再次登录。
答案 1 :(得分:4)
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 ""
答案 2 :(得分:3)
我认为tmux
不能。一种解决方法是将这样的内容添加到 tmux.conf 。
bind-key X new-window "ssh HOST"
然后新的窗口将从远程主机开始。
答案 3 :(得分:0)
我使用的是tmux 1.8,但没有找到内置的解决方案。这些解决方法至少适合我的常见用例:
shell-command
或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"'