Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSH2如果登录失败=退出。PHP_Php - Fatal编程技术网

SSH2如果登录失败=退出。PHP

SSH2如果登录失败=退出。PHP,php,Php,如果登录到ssh2失败,我将如何生成此代码、退出或退出 $query = mysql_query("SELECT * FROM ssh2"); while($row = mysql_fetch_array($query)){ $ip = $row['ip']; $user = $row['user']; $pass = $row['pass']; $ss

如果登录到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);
有关的文件说:

成功时返回TRUE,失败时返回FALSE

因此,您可以检查它是否返回false

if(ssh2_auth_password($ssh, $user, $pass) === false) {
    //do stuff if it can't login
}
在执行此操作时,您可能还希望在
ssh2\u 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
}

我更喜欢使用异常来处理以下内容:

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";
}

好的,这段代码以任何方式工作,我可以使它,所以当它失败时,它将跳过它,并使用不同的ssh2 loginEdited我的答案。如果答案确实回答了您的问题,请不要忘记标记“接受答案”。