Доступ запрещен для пользователя 'root' @ 'localhost' (используется пароль: YES) с использованием туннельного соединения ssh - PullRequest
2 голосов
/ 04 ноября 2019

Я использую phpseclib для подключения к базе данных mysql с помощью php для моего приложения. Я могу без проблем подключиться к mysql с верстаком, используя TCP / IP через SSH, но не могу подключить к нему свой код. Сначала я создаю ssh-соединение, а затем начинаю с mysql-соединений и запросов, но у меня появляется эта ошибка

mysqli_connect (): (HY000 / 1045): доступ запрещен для пользователя 'root' @ 'localhost '(используя пароль: YES)

Я обнаружил, что некоторые люди используют команду типа "$ ssh-> exec (' mysql -u user -p пароль ') для подключения к 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');
}

Ответы [ 2 ]

2 голосов
/ 04 ноября 2019

phpseclib (в настоящее время) не поддерживает туннелирование. И даже если бы это было так, вы бы не смогли использовать mysqli_connect - вам понадобится реализация MySQL с чистым PHP, вроде https://github.com/amphp/mysql.

Вместо этоголучшее, что вы сможете сделать (с phpseclib), это что-то вроде этого:

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

подключение к базе данных mysql с использованием библиотеки phpseclib рассказывает о том, как улучшить это немного но даже при этом вы не сможете использовать (например) подготовленные операторы или даже mysqli_real_escape_string .

лучшее решение, imho, было бы использовать что-то вроде AutoSSH

0 голосов
/ 05 ноября 2019

Я прочитал все ваши ответы и попытался подключиться традиционным способом, не используя функции ssh. Точно так же:

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

Используя ip сервера в качестве "хоста", имя пользователя и пароль от mysql, но я получил это сообщение сейчас:

mysqli_connect (): (HY000/ 2002): во время попытки подключения произошла ошибка, так как подключенная сторона не отвечает по прошествии определенного времени, или произошла установленная ошибка подключения, связанная с тем, что подключенный хост не ответил.

Этот способ работаеткогда я использую localhost, но не в этом случае с удаленным сервером. Все данные для входа в систему в порядке, я могу без проблем подключиться к базе данных через верстак (я должен соединиться с верстаком, используя TCP / IP через SSH), но я не знаю, почему я не могу соединиться с php.

...