目标是从远程服务器将 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.
我不能使用键绑定,因为这将从脚本内部运行。
答案1
没有指定 Linux 发行版或版本,因此此答案假设 SSH 的版本相对较新。
如果 tmux“默认”套接字在本地主机上使用但未在远程主机上使用,则 tmux 应该通过从远程主机转发 unix 套接字来工作:
ssh -R/tmp/tmux-$UID/default:/tmp/tmux-${REMOTE_UID}/default remote
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
尝试各种TMUX_TMPDIR
环境可能会带来更加透明和精致的体验,并且不需要知道 UID,但这取决于要求,而且对于脚本来说可能有点过度了。