可以tmux窗格远程SSH连接

我可以在本地运行tmux并通过ssh连接到远程机器,之后,任何新的窗格和/或屏幕与远程机器shell …我在说什么我不能在远程安装tmux机器,但我不想从每个窗格执行ssh连接,但sshlogin一次。

是这样的事情可能..谢谢

Solutions Collecting From Web of "可以tmux窗格远程SSH连接"

如果你只想登录一次,你可以使用ssh的ControlMaster功能。 像这样添加一些配置到你的~/.ssh/config

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

如果您多次(同一个用户)登录到同一台服务器(无论是否在一个tmux中),ssh将重新使用该连接,以便您不需要再次连接和登录。

我不认为tmux可以。 一个解决方法是将这样的东西添加到tmux.conf

 bind-key X new-window "ssh HOST" 

然后新的窗口将在远程主机上启动。

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 Ch 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 "" 

我正在使用tmux 1.8,并没有找到一个内置的解决方案。 这些解决方法至少适用于我的常见用例:

  • 捕获完整的窗格内容并搜索最后的ssh命令(我使用关于提示结束的知识或多或少地可靠地检测命令)
  • 如果失败,我使用tmux的new-windowsplit-window命令的shell-command选项检查窗口可能已经创建的命令

我的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目录中,并在我的.tmux.conf中更改了各种split-windownew-window快捷键的键绑定,如下所示:

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