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 스크립트가 두 단어로 분할되므로 작동하지 않습니다.
큰 따옴표를 사용 -o "-o \"x y\""
하면
... my $command="ssh -o "x y"";
이로 인해 Perl 할당이 손상되어 x y
문자열 외부에 배치됩니다.
마지막으로 작은따옴표를 사용하고 큰따옴표를 이스케이프 처리하면 -o '-o \"x y\"'
제대로 작동합니다.
... my $command="ssh -o \"x y\"";