2012-05-07 7 views
1

ssh를 사용하는 간단한 스크립트를 작성하려고하지만 ssh가 먼저 작동하는지 테스트하고 싶습니다. 작동하지 않으면 작동하지 않는 이유를 알고 싶습니다. 여기 "system"호출을 사용하여 perl에서 ssh의 FATAL 출력을 억제하는 방법은 무엇입니까?

내가 노력하고있어입니다 :

my $output = system("ssh -q -o ConnectionTimeout=3 -o BatchMode=yes $host \"echo $host\""); 
my $real_output = $output/256; 
if($real_output == 2){print "RESPONSE: $host is not working, No address associated to the name \n";} 
elsif($real_output == 255){print "RESPONSE: $host is not working (connection timed out after 3 secs, it exists but does not respond) \n";} 

이 작동 : 나는 그것을 실행할 때 오류를 수집하고 연결을 테스트하지만, 호스트의 이름이 존재하지 않는 경우는 다음을 보여줍니다

./testMachines --n invalid_host 
warning: Connecting to invalid_host failed: No address associated to the name 
RESPONSE: invalid_host is not working, No address associated to the name 

또는 호스트 이름이 존재하는 경우 그러나 시간 초과있어 : 나는 억제하려면 어떻게

./testMachines --n timeout_host 
ssh: FATAL: Connection timed out. No protocol greeting received in 10 seconds. 
RESPONSE: timeout_host is not working (connection timed out after 3 secs, it exists but does not respond) 

"SSH를 : FATAL" 및 "경고"메시지? 나는 ssh에 대한 '-q'옵션이 트릭을 할 것이라는 인상을 받고 있었지만, 그것은 그다지 효과가 없었다.

ssh (man 페이지에 제안 된대로)에서 '-q -q'옵션을 시도했지만 운이 없습니다. ... 운없이 아이디어를

my $output = system("ssh -q -o ConnectionTimeout=3 -o BatchMode=yes $host \"echo 2>&1\""); 

:

나는 또한이 시도했습니다?

# ./testMachines -n host 
RESPONSE: host is not working (connection timed out after 3 secs, it exists but does not respond) 

고마워요! :

기본적으로 내가 원하는 (치명적인 경고 SSH 메시지없이)과 같이 될 수있는 출력

당신이 모든 것을 이스케이프를 추가 할 수있는 아이디어를 가지고,하지만이 작동하는 방법을 확실하지

답변

1

:

my $output = system("ssh -q -o ConnectionTimeout=3 -o BatchMode=yes $host \"echo $host\" 2>/dev/null"); 
+1

는 너무 많은 탈출! '시스템 qq/ssh -q -o ConnectionTimeout = 3 -o BatchMode = yes $ 호스트 "echo $ host"2> – mob

+0

@Michael Slade, 디버그를 시도한 모든 것을 유감스럽게 생각합니다. 그러나 "경고"오류는 여전히 다음과 같이 표시됩니다 :'# ./testMachines -n invalid_host' ** 경고 : invalid_host에 연결하지 못했습니다 : 이름과 연결된 주소가 없습니다 ** ** RESPONSE : invalid_host가 작동하지 않습니다 (아니요 ** 나는 단지 _RESPONSE_ 부분 만 원한다. –

+0

@ mob ... 당신이 그 의미가 무엇인지 모르겠다. "QQ /"_ 대답에 기초하여 이것을 시도했다 : 'my $ output = 시스템 (ssh -q -o ConnectionTimeout = 3 -o BatchMode = yes $ 호스트 "echo $ host"2> &1); ' 그러나 이것은 내가 얻은 오류입니다. './testMachines -n invalid_host 연산자가 ./testMachines 라인 57에서 "q -o ConnectionTimeout = 3 -o"근처에있는 것으로 예상되는 곳을 찾아냅니다. (q를 미리 선언해야합니까?) 연산자가 ./testMachines 라인 57, "echo $ host"2 근처에서 (누락 연산자 2 이전?) ./testMachines 라인 57, "q -o ConnectionTimeout = 3 - o BatchMode " –

관련 문제