将 tmux 会话附加到远程机器

将 tmux 会话附加到远程机器

我在本地机器上使用 tmux,通常同时进行多个会话。

我通常做的是,在一个会话中,我使用不同的窗口在本地工作,而在其他会话中,每个会话我将多个窗口连接到一个主机。

在我日常使用 tmux 时,会话/窗口树看起来像这样:

(TMUX on my local machine)
 |
 +- session 1: local
 |  \_ window 1: local shell
 |  \_ window 2: local shell
 |  \_ ...
 |
 + session 2: somehost
 |  \_ window1: ssh user@somehost
 |  \_ window2: ssh user@somehost
 |  \_ ...
 |
 + session 3: someotherhost
    \_ window1: ssh user@someotherhost
    \_ window2: ssh user@someotherhost
    \_ ...

有没有办法使会话 2 和会话 3 成为某种远程会话,连接到在某个主机和某个其他主机上创建的 tmux 会话?

上面的树看起来是这样的:

(TMUX on my local machine)
 |
 +- session 1: local
 |  \_ window 1: local shell
 |  \_ window 2: local shell
 |  \_ ...
 |
 + session 2 linked to an existing session on somehost
 |  \_ window1: shell on somehost
 |  \_ window2: shell on somehost
 |  \_ ...
 |
 + session 3 linked to an existing session on someotherhost
    \_ window1: shell on someotherhost
    \_ window2: shell on someotherhost
    \_ ...

我找到了这个主题,但我不确定这是我想做的:主机之间共享 tmux 套接字可能吗?

我认为我所寻找的是需要我在本地机器、somehost 和 someotherhost 上拥有相同的 tmux 配置,但这不是问题。

答案1

您可以在连接到远程主机时将命令传递给 ssh。包括连接到远程 tmux 会话-t的选项:tmux attach-session

ssh <remote host> -t tmux attach-session

这篇文章通过 ssh 连接到 tmux 会话解释得更详细。

答案2

ssh remotehost如果您的主要问题是每次打开新窗口时都必须输入内容,default-command则会话选项可能是一种解决方法。

当您在设置的会话中打开新窗口时,它会自动执行您指定的命令。

一个简单的设置.tmux.conf

bind-key C-r new-session ssh remotehost \; set-option default-command "ssh remotehost"

此键绑定Ctrl-r创建一个新会话,其中每个新打开的窗口首先ssh remotehost代表您执行。

您可以使用以下设置在会话创建时选择要连接的主机:

bind-key C-r command-prompt "new-session -s %1 ssh %1 \; set-option default-command \"ssh %1\""

这个会在每次创建会话时(而不是每次创建窗口时)询问您想要执行的主机,ssh并启动专用于该主机的会话。

ssh如果您在 ssh 配置中启用 SSH 多路复用,则执行许多操作所需的时间会很短。.ssh/config示例如下:

Host remotehost
    ControlMaster auto
    ControlPath ~/.ssh/mux-%r@%h:%p
    ControlPersist 10

请注意,此 tmux 设置不会在远程主机中创建 tmux 会话。如果 ssh 连接丢失,受影响的 tmux 窗口将永远不会返回。

答案3

您可以使用 socat 之类的工具将 tmux 使用的 unix 域套接字隧道传输到本地计算机。但实际上您只是将一个隧道 (ssh) 换成了另一个 (socat),因此这并不是更好的选择,而且也不安全。

答案4

如果您说的是远程 shell,则意味着您可以在那里执行命令,换句话说,您可以直接访问。在这种情况下,您可以简单地ssh对每个远程窗口使用连接。

你可以告诉那里类似的事情:

“嘿,但是没有办法为每个远程服务器设置多个窗口!”

这是真的,因为 ssh 有限制。但是,您可以在每个远程服务器上启动 tmux 会话。笔记:在这种情况下,您需要Ctrl+b在本地机器上重新绑定默认值以防止冲突。

另外,我建议您使用tmuxinator,如果您至少每天纠正一次 tmux 会话,它将是非常有用的工具。

相关内容