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