测试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_proxy
match 子句中是否可以访问以自动化代理使用,但让上述工作就足够了。
要调用“匹配”指令,ssh 实际上会调用:
“$SHELL”要么是 SHELL 环境变量的值,要么是默认值,通常是“/bin/sh”。“command”是来自“match”指令的命令。这是执行命令的实际代码:
请注意,
execv()
它不会为正在执行的 shell 搜索任何类型的路径,因此 SHELL 必须是完整的路径名,例如“/bin/bash”或“/usr/local/bin/zsh”。如果 shell 已经启动,然后运行“echo”失败,那么你会从 shell 中得到一个错误。但是你得到的错误来自 ssh。这意味着问题在于调用 shell,而不是“echo”命令。
最简单的解释是你的 SHELL 环境变量无效。它指的是丢失的文件,或者它位于您无法读取的目录中。
您应该将
SHELL
环境变量设置为 shell 的完整路径,而不是简单地设置为bash
orzsh
。尝试: