2014-02-27 116 views
2

嗨最好的方法是檢查SSH是否因任何原因失敗? 我可以使用IF語句(如果它失敗,然後做點什麼) 我在一個循環中使用ssh命令,並將我的主機名稱傳遞給一個平面文件。在腳本中檢查SSH失敗

,所以我這樣做:

for i in `cat /tmp/hosts` ; do ssh $i 'hostname;sudo ethtool eth1'; done 

我得到的某個時候這個錯誤,或者我只是無法連接

ssh: host1 Temporary failure in name resolution 

我想跳過,我無法連接到是SSH失敗的主機。做這個的最好方式是什麼?是否有運行時錯誤,我可以繞過主機,我不能ssh出於任何原因,也許ssh不被允許或我沒有正確的密碼?

請多關照 乾杯

回答

3

您可以檢查返回值ssh在給你最初如下所示: How to create a bash script to check the SSH connection?

$ ssh -q [email protected] exit 
$ echo $? 
255 

$ ssh -q [email protected] exit 
$ echo $? 
0 

編輯 - 我欺騙和NC

東西使用像這樣:

#!/bin/bash 
ssh_port_is_open() { nc -z ${1:?hostname} 22 > /dev/null; } 

for host in `cat /tmp/hosts` ; do 
    if ssh_port_is_open $host; then 
     ssh -o "BatchMode=yes" $i 'hostname; sudo ethtool eth1'; 
    else 
     echo " $i Down" 
    fi 
done 
+0

好THX wbt11a ..我知道如何捕獲,但在SSH comman的背景下d我發佈瞭如何做到這一點?我需要在這個命令的同一個傳遞中爲我在'cat/tmp/hosts'中使用它;做ssh $ i'hostname; sudo ethtool eth1';完成 – theuniverseisflat

+0

嗨,感謝我的一半通過。但是我仍然收到4個無法訪問的密碼主機的提示。我怎樣才能跳過這些主機?基本上有辦法逃避密碼挑戰,並跳轉到下一個主機? – theuniverseisflat

+0

嘗試在示例中看到'-o'BatchMode = yes''標誌。 – wbt11a

5

要檢查是否有連接和/或運行遠程命令的問題:

if ! ssh host command 
then 
    echo "SSH connection or remote command failed" 
fi 

要檢查是否有連接問題,無論遠程命令的成功(除非它返回狀態255,這是罕見的):

if ssh host command; [ $? -eq 255 ] 
then 
    echo "SSH connection failed" 
fi 

適用於你的榜樣,這將是:

for i in `cat /tmp/hosts` ; 
do 
    if ! ssh $i 'hostname;sudo ethtool eth1'; 
    then 
    echo "Connection or remote command on $i failed"; 
    fi 
done 
+0

好Thx「ThatOtherGuy」..我知道如何陷阱,但在我發佈的ssh命令我該怎麼做?我需要在這個命令的同一個傳遞中爲我在'cat/tmp/hosts'中使用它;做ssh $ i'hostname; sudo ethtool eth1';完成 – theuniverseisflat

+0

@theuniverseisflat請參閱更新 –

+0

謝謝我的一半。但是我仍然收到4個無法訪問的密碼主機的提示。我怎樣才能跳過這些主機?基本上有辦法逃避密碼挑戰,並跳轉到下一個主機? – theuniverseisflat