2012-05-07 72 views
1

我想寫一個簡單的腳本,使用ssh,但我想測試一下,ssh首先工作 - 如果它不工作我想知道爲什麼它不工作。如何使用「系統」調用在perl上禁止ssh的致命輸出?

這裏是我嘗試:

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上使用'-q -q'選項(如手冊頁中所示),但沒有運氣。

我也試過這樣:

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

沒有任何的運氣...任何想法?

基本上我想要的是輸出是這樣(沒有致命和警告SSH消息):

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

非常感謝!

回答

1

不知道你得到了主意,添加所有的轉義,但這應該工作:

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

太多逃脫! 'system qq/ssh -q -o ConnectionTimeout = 3 -o BatchMode = yes $ host「echo $ host」2> &1/' ; - ) – mob

+0

@Michael Slade,對不起所有的轉義我試圖調試..只是試過你的建議但是「警告」錯誤仍顯示如下:'#./testMachines -n invalid_host' **警告:連接到invalid_host失敗:沒有與名稱關聯的地址** **響應:invalid_host無效(No地址關聯的名稱)** 我只想要_RESPONSE_部分 –

+0

@mob ... 不知道你的意思是什麼_「qq /」_ 我試着根據你的回答: 'my $ output =系統(ssh -q -o ConnectionTimeout = 3 -o BatchMode = yes $ host「echo $ host」2> &1);' 但是,這是我得到的錯誤: './testMachines -n invalid_host Bareword發現運算符預期在./testMachines第57行,靠近「q -o ConnectionTimeout = 3 -o」 (您是否需要預先聲明q? ) 運算符在./testMachines第57行,「echo $ host」2「 (缺少2之前的運算符)時發現的數字 ./testMachines第57行,在」q -o ConnectionTimeout = 3 - o BatchMode「' –