将tmux会话附加到远程计算机


31

我在本地计算机上使用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某种远程会话连接到在somehost和someotherhost上创建的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配置,但这不是问题。


您有解决办法吗?我认为,可以像本地会议一样管理远程会议是个好主意,但看起来投票率最高的答案实际上并不是您的问题
mbigras

Answers:


18

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

ssh <remote host> -t tmux attach-session

这篇关于通过ssh附加到tmux会话的帖子对此进行了更详细的说明。


18
这不只是给您一个嵌套会话吗?我相信OP要做的是将远程会话显示在本地会话旁边,以便他们可以在一个tmux的选择窗口/选择树中导航。
stsquad

如果在远程主机上连接了多个会话,则可以使用:ssh <远程主机> -t tmux a -t <会话名称>
user1757247

我进行了一些编辑以修正遇到的问题并逐步进行。希望同行评审将很快完成。此工作有效ssh <remote host> -t /path/to/tmux a -t <my-session-name>,需要额外的费用-t
Merlin

我和OP有相同的问题。这没有回答我的问题。它创建了一个嵌套的tmux会话,在该会话中,我必须对要发送给该会话的所有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窗口将永不返回。


1

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


也许socat通过隧道ssh?🙂
五花八门的

此时,这tmate可能是远程tmux处理的最佳工具

0

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

您可以说出类似以下内容:

“嘿,但是每个远程服务器都没有多个窗口!”

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

我也建议您使用tmuxinator,如果您至少每天撤退tmux会话,它是非常有用的工具。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.