Ssh

如何向遠端設備的 tmux-session 發送命令(使用 ssh)

  • September 12, 2022

在我的 vanila Arch Linux 系統上,我可以使用以下命令發送到本地tmux-session(會話main):

$ tmux send -t main.0 'echo asdf' ENTER

我還可以使用ssh: 向遠端機器發送命令(僅用於展示,我正在使用localhost):

$ ssh garid@localhost "ls /home"

我想從我的終端發送命令tmux-sessionremote-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不是本地主機時工作。

我們還確認,連接時命令失敗的原因localhostTMUX_TMPDIRSSH 會話中未設置變數。此環境變數用於tmux確定應在何處創建包含其控制套接字的目錄。如果未設置變數,該實用程序將使用/tmp.

執行tmuxvia時未設置該變數,ssh因為會話是非互動式非登錄會話。因此,它不會獲取您的~/.config/shell/profile文件,該文件將TMUX_TMPDIR變數設置為/tmp. 該文件由您使用的LARBS 提取,但我對此一無所知。

您現在有幾種可能的前進方式:

  1. 沒做什麼; ssh+命令的預期目標tmux絕不是本地主機。
  2. 確保TMUX_TMPDIR在呼叫命令時變數設置正確localhost;你可以這樣做
ssh localhost "env TMUX_TMPDIR='$TMUX_TMPDIR' tmux send -t main.0 'echo asdf' ENTER"

…但它會假設本地變數的值是其他主機的正確值,因此它不太可能成為通用解決方案。無論如何,與sshto連接localhost是一件非常不尋常的事情,所以不要這樣做,而是循環回到第一點並且不做任何事情,或者…… 3. 通過修改將 的值在本地重置為TMUX_TMPDIR預設值(將變數設置為或將賦值完全註釋掉);不過,我不知道這如何與 LARBS 一起玩。/tmp``~/.config/shell/profile``/tmp

引用自:https://unix.stackexchange.com/questions/716978