0

ssh2へのログインが失敗した場合、このコードを作成、終了、または終了するにはどうすればよいですか。

            $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);
4

2 に答える 2

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クレデンシャルのセットがもう1つしかない場合は、それ自体の内部を複製するだけです。

//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
}
于 2012-09-04T21:25:39.880 に答える
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";
}
于 2012-09-04T21:53:31.507 に答える