clustersh:传递 ssh 选项

clustersh:传递 ssh 选项

clustersh (cssh) 可以将选项传递给 ssh:

cssh -o "-o ConnectTimeout=1" myserver.mydomain.org

我试图将ProxyCommand选项传递给ssh,但它不起作用。对于 plain ssh,我可以使用这个:

ssh -o ProxyCommand='ssh [email protected] nc %h %p' behind-fw.mydomain.org

它将non-routable.mydomain.org通过连接到服务器1.2.3.4。但是当我尝试将其与以下内容一起使用时cssh

cssh -o "-o ProxyCommand='ssh [email protected] nc %h %p'" non-routable.mydomain.org

我收到此错误:

Cannot open pipe for reading when talking to non-routable.mydomain.org : Interrupted system call

我怎样才能传递ProxyCommand到 cssh ?

答案1

如果您想在选项中传递空格,您需要了解 perl 脚本如何处理引号和双引号cssh。执行此操作的一个简单方法是使用内置调试选项。在第 2 级,它将显示它正在运行的 xterm 命令。它相当复杂,包含一个用单引号括起来的内联 perl 脚本。在脚本内部,它将变量设置为用双引号括起来的字符串。因此,当您给出-o "-o 'x y'"正在执行的选项时:

xterm ... -e perl -e ' ... my $command="ssh -o 'x y'"; ... '

这会将 perl 脚本分成 2 个单词,因此不起作用。

如果你在 中使用双引号-o "-o \"x y\"",你会得到

... my $command="ssh -o "x y"";

这会破坏 perl 分配,使其x y位于字符串之外。

最后,使用单引号和转义双引号,-o '-o \"x y\"'它应该可以工作:

... my $command="ssh -o \"x y\"";

相关内容