Ssh

clusterssh:傳遞 ssh 選項

  • March 26, 2020

clusterssh (cssh) 可以將選項傳遞給 ssh:

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

我正在嘗試將ProxyCommand選項傳遞給ssh,但它不起作用。使用 plain ssh,我可以使用它:

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\"";

引用自:https://unix.stackexchange.com/questions/575012