Ssh

Match Exec 無法執行任何操作

  • January 7, 2022

測試SSHMatch Exec功能。我有這個最小的~/.ssh/config

Match Exec echo
  ServerAliveInterval 60

我正在跑步

ssh localhost

我明白了

Unable to execute 'echo': No such file or directory

無論我是否使用完整路徑,或者使用雙引號或單引號,這都是正確的。我也嘗試在我的文件夾中放置一個假echo腳本。.ssh我嘗試了多個命令(test, nc, connect)。似乎該Exec功能根本看不到我的路徑。

我正在使用 OpenSSH 執行 WSL Debian。我的最終目標是測試$http_proxymatch 子句中是否可以訪問以自動化代理使用,但讓上述工作就足夠了。

您應該將SHELL環境變數設置為 shell 的完整路徑,而不是簡單地設置為bashor zsh

嘗試:

SHELL=/bin/bash ssh user@host

要呼叫“匹配”指令,ssh 實際上會呼叫:

$SHELL -c 'command'

“$SHELL”要麼是 SHELL 環境變數的值,要麼是預設值,通常是“/bin/sh”。“command”是來自“match”指令的命令。這是執行命令的實際程式碼

   argv[0] = shell;
   argv[1] = "-c";
   argv[2] = xstrdup(cmd);
   argv[3] = NULL;

   execv(argv[0], argv);
   error("Unable to execute '%.100s': %s", cmd, strerror(errno));

請注意,execv()它不會為正在執行的 shell 搜尋任何類型的路徑,因此 SHELL 必須是完整的路徑名,如“/bin/bash”或“/usr/local/bin/zsh”。

如果 shell 已經啟動,然後執行“echo”失敗,那麼你會從 shell 中得到一個錯誤。但是你得到的錯誤來自 ssh。這意味著問題在於呼叫 shell,而不是“echo”命令。

最簡單的解釋是你的 SHELL 環境變數無效。它指的是失去的文件,或者它位於您無法讀取的目錄中。

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