Ssh
如何向遠端設備的 tmux-session 發送命令(使用 ssh)
在我的 vanila Arch Linux 系統上,我可以使用以下命令發送到本地
tmux-session
(會話main
):$ tmux send -t main.0 'echo asdf' ENTER
我還可以使用
ssh
: 向遠端機器發送命令(僅用於展示,我正在使用localhost
):$ ssh garid@localhost "ls /home"
我想從我的終端發送命令
tmux-session
(remote-machine
如下所示):$ ssh -t garid@localhost "tmux send -t main.0 'echo asdf' ENTER"
但它輸出以下錯誤:
error connecting to /tmp/tmux-1000/default (No such file or directory) Connection to localhost closed.
我在這裡做錯了什麼?
在評論中,我們已經確認預期的命令,
ssh remote "tmux send -t main.0 'echo asdf' ENTER"
…在
remote
不是本地主機時工作。我們還確認,連接時命令失敗的原因
localhost
是TMUX_TMPDIR
SSH 會話中未設置變數。此環境變數用於tmux
確定應在何處創建包含其控制套接字的目錄。如果未設置變數,該實用程序將使用/tmp
.執行
tmux
via時未設置該變數,ssh
因為會話是非互動式非登錄會話。因此,它不會獲取您的~/.config/shell/profile
文件,該文件將TMUX_TMPDIR
變數設置為/tmp
. 該文件由您使用的LARBS 提取,但我對此一無所知。您現在有幾種可能的前進方式:
- 沒做什麼;
ssh
+命令的預期目標tmux
絕不是本地主機。- 確保
TMUX_TMPDIR
在呼叫命令時變數設置正確localhost
;你可以這樣做ssh localhost "env TMUX_TMPDIR='$TMUX_TMPDIR' tmux send -t main.0 'echo asdf' ENTER"
…但它會假設本地變數的值是其他主機的正確值,因此它不太可能成為通用解決方案。無論如何,與
ssh
to連接localhost
是一件非常不尋常的事情,所以不要這樣做,而是循環回到第一點並且不做任何事情,或者…… 3. 通過修改將 的值在本地重置為TMUX_TMPDIR
預設值(將變數設置為或將賦值完全註釋掉);不過,我不知道這如何與 LARBS 一起玩。/tmp``~/.config/shell/profile``/tmp