Ssh
Match Exec 無法執行任何操作
測試SSH
Match 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_proxy
match 子句中是否可以訪問以自動化代理使用,但讓上述工作就足夠了。
您應該將
SHELL
環境變數設置為 shell 的完整路徑,而不是簡單地設置為bash
orzsh
。嘗試:
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 環境變數無效。它指的是失去的文件,或者它位於您無法讀取的目錄中。