Tmux:ssh 进入服务器,分割窗口并让其 ssh 进入同一服务器

Tmux:ssh 进入服务器,分割窗口并让其 ssh 进入同一服务器

我们使用 tmux 的方式是通过 ssh 进入主服务器,然后打开 tmux,为每个通过 ssh 进入的服务器创建一个新窗口(CS,提示输入服务器,然后创建一个新窗口并 ssh 进入服务器)。我想要做的是绑定 C-\ 和 C-“-”以拆分当前窗口并 ssh 进入同一服务器,而不是为主服务器打开一个窗口。我们的主目录已安装,因此我的 .tmux.conf 和脚本都会跟随我到每个服务器。

每个窗口都设置了服务器名称,但将来我们可能会尝试将其设置为服务器名称,任务(例如“srv001,htop”),具体取决于其工作原理:)

我们发现最接近的方法是嵌套并使用插件来更改 tmux 将响应前缀的服务器。然后嵌套的窗口将拆分并显示该服务器上的另一个窗格。此时我可能只会执行另一个 CS(提示输入 ssh 服务器名)并加入窗口(作为替代方案,这么说并不是一个坏主意)

谢谢您的任何指导、评论和问题。

答案1

这个 tmux 插件让这一切变得非常简单。您可以使用与通常用于拆分窗格相同的键绑定,如果您从远程进行拆分,它会自动再次通过 ssh 连接到主机,否则则不会。

https://github.com/pschmitt/tmux-ssh-split

答案2

因此,您通过 ssh 进入服务器 1 并运行 tmux,然后从 tmux 内部通过 ssh 进入服务器 2。然后,您想绑定一个键来拆分窗口,并通过 ssh 进入服务器 2?这样对吗?

假设这是正确的,这是让 tmux 根据当前窗口的现有状态执行某些操作的相对常见的问题,答案是您需要在创建窗口之前或从窗口内部告诉它状态。

因为您已经有创建窗口的快捷方式,所以您可以将服务器名称存储在C-s绑定中,然后在新的C-\绑定中使用它。

例如,更改C-s绑定以在具有目标主机的窗口上设置用户变量,如下所示 - 请注意这是在set-option新窗口内部执行的,但在运行 ssh 之前:

bind C-s command-prompt -pserver 'neww "tmux set -w @myserver \"%1\"; ssh \"%1\""'

然后您可以在绑定中使用它C-\run-shell扩展格式):

bind 'C-\' run 'tmux splitw "ssh \"#{@myserver}\""'

如果它已经是主机,您可以对窗口名称执行类似操作:

bind 'C-\' run 'tmux splitw "ssh \"#{window_name}\""'

但是,如果您更改窗口名称的格式,或者手动重命名窗口,则此方法将不起作用。

(如果您看到我之前的回答,我最初以为您可以使用环境,但当然那是每个会话而不是每个窗口,它必须是一个用户变量。)

相关内容