2012-09-04 31 views
0

我如何使這段代碼退出或退出,如果登錄到ssh2失敗。如果登錄失敗,則爲SSH2 =退出。 PHP

  $query = mysql_query("SELECT * FROM ssh2"); 
      while($row = mysql_fetch_array($query)){ 
      $ip = $row['ip']; 
      $user = $row['user']; 
      $pass = $row['pass']; 
      $ssh = ssh2_connect($ip, 22); 
      ssh2_auth_password($ssh, $user, $pass); 

回答

2

文檔上ssh2_auth_password()說:

返回TRUE或FALSE的成功失敗。

所以你可以只檢查是否返回false

if(ssh2_auth_password($ssh, $user, $pass) === false) { 
    //do stuff if it can't login 
} 

當你這樣做,你可能還需要添加一些錯誤檢查到ssh2_connect()通話,因爲它可以返回一個非資源,如果它無法連接。

$ssh = ssh2_connect($ip, 22); 
if($ssh === false) { 
    //do stuff if it can't connect 
} 

編輯發表評論

如果你想擁有它回退到另一個登錄嘗試,你可以做一對夫婦的方式。如果您只需擁有一組憑證,則可以簡單地在其內部複製if

//try the first login 
if(ssh2_auth_password($ssh, $user, $pass) === false) { 
    //try the second set 
    if(ssh2_auth_password($ssh, $user2, $pass2) === false) { 
     //do stuff if it can't login 
    } 
} 

或者,如果你有大量的憑證來試試,你可以將它們存儲在一個數組和循環遍歷它

$creds = array(
    array('user' => $user, 'pass' => $pass), 
    array('user' => $user2, 'pass' => $pass2), 
    //etc 
); 

$logged_in = false; 
foreach($creds as $cred) { 
    if(ssh2_auth_password($ssh, $cred['user'], $cred['pass'])) { 
     $logged_in = true; 
     break; 
    } 
} 

if(!$logged_in) { 
    //do stuff when you can't login 
} 
+0

確定生病測試這個權利現在,由於 – user1643454

+0

確定此代碼的工作什麼辦法可以使它所以當它失敗時它會跳過它,使用編輯我的回答不同的SSH2登錄 – user1643454

+0

。不要忘了標記接受答案,如果它確實回答你的問題。 – jprofitt

0

我更喜歡使用異常這樣的事情:

try { 
    if (!$query = mysql_query("SELECT * FROM ssh2")) { 
     throw new Exception("MySQL query failed."); 
    } 
    while($row = mysql_fetch_array($query)){ 
     $ip = $row['ip']; 
     $user = $row['user']; 
     $pass = $row['pass']; 
     $ssh = ssh2_connect($ip, 22); 
     if ($ssh === false) { 
      throw new Exception("Connection to $ip:22 failed"); 
     } 
     if (ssh2_auth_password($ssh, $user, $pass) === false) { 
      throw new Exception("Password failed for user '".$user."'"); 
     } 
    } 
} 
catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
}