我在本地机器上使用 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 会话,它将是非常有用的工具。