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)
非常感謝!
丹
太多逃脫! 'system qq/ssh -q -o ConnectionTimeout = 3 -o BatchMode = yes $ host「echo $ host」2> &1/' ; - ) – mob
@Michael Slade,對不起所有的轉義我試圖調試..只是試過你的建議但是「警告」錯誤仍顯示如下:'#./testMachines -n invalid_host' **警告:連接到invalid_host失敗:沒有與名稱關聯的地址** **響應:invalid_host無效(No地址關聯的名稱)** 我只想要_RESPONSE_部分 –
@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「' –