使用ssh隧道连接拒绝用户'root'@'localhost'的访问(使用密码:是)

我正在使用phpseclib为我的应用程序使用php连接到mysql数据库。 我可以通过SSH通过TCP / IP使用workbench连接到mysql,没有问题,但是我无法将代码连接到它。 我先创建一个ssh连接,然后从mysql连接和查询开始,但是出现此错误

  

mysqli_connect():(HY000 / 1045):用户'root'@'localhost'的访问被拒绝(使用密码:是)

我发现有些人使用“ $ ssh-> exec('mysql -u user -p password')之类的命令连接到mysql,但是在那之后,我该如何进行所有查询? “ exec”命令与发送命令到服务器控制台一样?

这是我的代码,希望您能对我有所帮助: 这是 conexion.php

include('Net/SSH2.php');
include('remote_conexion.php');

$db_host="127.0.0.1"; 
$db_user="root";
$db_password=" ";
$db_name="mascotas"; 
$ssh = new Net_SSH2($host);
if (!$ssh->login($sftp_user,$sftp_password)) {
    exit('Login Failed');
}
$connection = mysqli_connect($db_host,$db_user,$db_password,$db_name);

这是 remote_conexion.php (忽略“ sftp”内容,我将其用于管理文件)

include('Net/SFTP.php');
$host="***.***.**.***";              
$sftp_user="user";              
$sftp_password="*******";   
$port="22";

   $sftp = new Net_SFTP($host);
if (!$sftp->login($sftp_user,$sftp_password)) {
    exit('Login Failed');
}
guiyongzhou 回答:使用ssh隧道连接拒绝用户'root'@'localhost'的访问(使用密码:是)

phpseclib不(当前)支持隧道。即使这样做,您也将无法使用mysqli_connect-您必须拥有一个纯PHP MySQL实现,有点像https://github.com/amphp/mysql

用phpseclib代替您可以做到的最好的事情是这样的:

echo $ssh->exec('mysql -uUSER -pPASSWORD DATABASE -e "SQL COMMAND"');

connect to the mysql database using phpseclib library略微讨论了如何进行改进,但即使如此,您也将无法利用prepared statements甚至mysqli_real_escape_string

最好的解决方案,恕我直言,将使用类似AutoSSH

,

我已经阅读了所有答案,并尝试通过传统方式进行连接,而不使用ssh函数。就是这样:

 $connection = mysqli_connect($host,$db_user,$db_password,$db_name);

使用服务器ip作为“主机”,使用mysql的用户名和密码,但是我现在收到此消息:

  

mysqli_connect():( HY000 / 2002):在连接尝试期间发生了错误,因为被连接方在一段时间后没有响应,或者发生了已建立的连接错误,即所连接的主机没有响应。

当我使用本地主机时,这种方式有效,但在这种情况下,对于远程服务器却不起作用。 所有登录数据都可以,我可以通过工作台连接到数据库而不会出现问题(我必须使用SSH上的TCP / IP与工作台连接),但是我不知道为什么我无法与php连接。

本文链接:https://www.f2er.com/3169732.html

大家都在问