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

ProxyCommandcsshにどのように渡すことができますか?

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

関連情報