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

问题描述 投票:2回答:2

我正在使用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');
}
php mysql ssh phpseclib
2个回答
2
投票

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连接。


0
投票
我已经阅读了所有答案,并尝试通过传统方式进行连接,而不使用ssh函数。就像这样:
© www.soinside.com 2019 - 2024. All rights reserved.