将 tmux 会话附加到远程机器

lil*_*rox 49 linux ssh 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
    \_ ...
Run Code Online (Sandbox Code Playgroud)

有没有办法让会话 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
    \_ ...
Run Code Online (Sandbox Code Playgroud)

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

我想我正在寻找的东西要求我在本地机器上具有相同的 tmux 配置,somehost 和 someotherhost 但这不是问题。

小智 26

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

ssh <remote host> -t tmux attach-session
Run Code Online (Sandbox Code Playgroud)

这篇关于通过 ssh 附加到 tmux 会话的帖子更详细地解释了它。

  • 这不是给你一个嵌套的会话吗?我相信 OP 试图做的是让远程会话出现在他们的本地会话旁边,这样他们就可以在一个 tmux 的选择窗口/选择树中导航。 (34认同)
  • 我和OP有同样的问题。这不能回答我的问题。它创建了一个嵌套的 tmux 会话,我必须在其中双重转义我想要发送到该会话的所有 tmux 命令。我想要远程会话像本地会话一样出现在我的会话列表中的东西。 (5认同)

som*_*may 5

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
Run Code Online (Sandbox Code Playgroud)

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


小智 1

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

你可以这样说:

“嘿,但是不可能为每个远程服务器拥有多个窗口!”

由于 ssh 限制,确实如此。但是,您可以在每个服务器或您的远程服务器上启动 tmux 会话。注意:在这种情况下,您需要Ctrl+b在本地计算机上重新绑定默认值以防止冲突。

我还建议您使用tmuxinator,如果您至少每天都重新进行 tmux 会话,那么它是非常有用的工具。