将 tmux 命令从远程内部 ssh 会话发送到本地实例

Nab*_*ham 5 ssh tmux

目标是从远程服务器向本地运行的 tmux 发送 tmux 命令。不要运行到不同的 tmux 实例。

在 tmux 中,我们通过 ssh 连接到不运行 tmux 的服务器

local>tmux send-key C-p  # works
local>ssh user@remote
user@remote> tmux send-key C-p # this will try to find tmux instance on remote. but we want to send it the local instead.
Run Code Online (Sandbox Code Playgroud)

我不能使用键绑定,因为这将从内部脚本运行。

Mar*_*rio 0

未指定 Linux 发行版或版本,因此此答案假定 SSH 版本相对较新。

如果 tmux“默认”套接字在本地主机上使用,但不在远程主机上使用,则 tmux 应该通过从远程主机转发 unix 套接字来工作:

ssh -R/tmp/tmux-$UID/default:/tmp/tmux-${REMOTE_UID}/default remote
Run Code Online (Sandbox Code Playgroud)

REMOTE_UID应手动设置为远程用户的 UID,但UID通常在环境中自动设置。

理想情况下,应选择唯一的(非默认)tmux 套接字名称以避免冲突:

local> tmux -L foo
remote> ssh -R/tmp/tmux-$UID/foo:/tmp/tmux-${REMOTE_UID}/foo remote
remote> tmux -L foo send-key C-p
Run Code Online (Sandbox Code Playgroud)

尝试使用TMUX_TMPDIR环境可能会提供更透明和更精致的体验,并解决必须知道 UID 的问题,但这取决于需求,并且对于脚本来说可能有点过分了。

  • @Devenv:https://github.com/tmux/tmux/issues/462 与共享目录上的套接字相关。对于 SSH 转发的 Unix 套接字,情况有所不同,因为 SSH 作为“代理”工作,并且只转发在大多数情况下应该有效的请求(除非需要 MSG_OOB 或某些其他系统特定的 OOB 功能。) (2认同)