![clustersh:传递 ssh 选项](https://linux22.com/image/169801/clustersh%EF%BC%9A%E4%BC%A0%E9%80%92%20ssh%20%E9%80%89%E9%A1%B9.png)
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\"";