Ssh
clusterssh:傳遞 ssh 選項
clusterssh (cssh) 可以將選項傳遞給 ssh:
cssh -o "-o ConnectTimeout=1" myserver.mydomain.org
我正在嘗試將
ProxyCommand
選項傳遞給ssh
,但它不起作用。使用 plainssh
,我可以使用它:ssh -o ProxyCommand='ssh root@1.2.3.4 nc %h %p' behind-fw.mydomain.org
它將
non-routable.mydomain.org
通過連接到伺服器1.2.3.4
。但是當我嘗試使用它時cssh
:cssh -o "-o ProxyCommand='ssh root@1.2.3.4 nc %h %p'" non-routable.mydomain.org
我收到此錯誤:
Cannot open pipe for reading when talking to non-routable.mydomain.org : Interrupted system call
我怎樣才能傳遞
ProxyCommand
給 cssh ?
如果要在選項中傳遞空格,則需要查看 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\"";