Match Exec 无法执行任何操作

Match Exec 无法执行任何操作

测试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 子句中是否可达,以便自动使用代理,但让上述内容正常工作就足够了。

答案1

为了调用“match”指令,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环境变量无效。它指的是一个丢失的文件,或者它位于您无法读取的目录中。

答案2

您应该将SHELL环境变量设置为 shell 的完整路径,而不仅仅是bashzsh

尝试:

SHELL=/bin/bash ssh user@host

相关内容