Доброго времени суток. Возникла следующая загвоздка:
Использую для работы windows с установленным WAMP. Поставщик услуг хостинга позволяет подключаться к бд только по SSH2 (оно и правильно), вот только подключиться к базе не удаётся. Делаю следующее
$ssh_server='93.125.xx.xx'; //адрес сервера
$ssh_port='22'; //порт сервера
$ssh_user=''; //логин от сервера
$ssh_password=''; //пароль от сервера
$ssh_connection=ssh2_connect($ssh_server, $ssh_port);
$ssh_auth=ssh2_auth_password($ssh_connection, $ssh_user, $ssh_password);
$ssh_tunnel = ssh2_tunnel($ssh_connection, $ssh_server, $ssh_port);
Тут всё проходит на ура. Дальше проверяю и пробую подключиться к БД. Но так и не понял, как используя туннель созданный подключаться
if ($ssh_connection and $ssh_auth and $ssh_tunnel) {
$db_hostname = '127.0.0.1';
$db_database = ''; //имя БД mysql
$db_username = ''; //имя пользоватля БД
$db_password = ''; //пароль пользователя БД
$db_port = '3306';
$connection_mysql = new mysqli($db_hostname, $db_username, $db_password, $db_database, $db_port);
if ($connection_mysql->connect_error) exit($connection_mysql->connect_error);
mysqli_set_charset($connection_mysql, "utf8");
}
Выдаёт ошибку подключения стандартную
Access denied for user 'igcby_gpresults'@'localhost' (using password: YES)
Но судя по всему он коннектится просто к моей локальной базе данных, а у меня на машине такой нет.
Если же попробовать подставить в качестве $db_hostname
переменные ssh, то тоже ничего путёвого не выходит. Для переменных $ssh_connection, $ssh_auth, $ssh_tunnel выдаёт, соответственно:
mysqli::__construct() expects parameter 1 to be string, resource given
mysqli::__construct(): php_network_getaddresses: getaddrinfo failed
mysqli::__construct() expects parameter 1 to be string, resource given
var_dump трёх переменных ssh
var_dump($ssh_connection);
var_dump($ssh_auth);
var_dump($ssh_tunnel);
выдаёт следующее
resource(2) of type (SSH2 Session)
bool(true)
resource(3) of type (stream)
Если же в качестве $db_hostname
указывать непосредственно сам адрес сервера, как при подключении по ssh ($ssh_server='93.125.xx.xx'; и сделать также $db_hostname='93.125.xx.xx';
), то толку тоже не будет (mysqli::__construct(): (HY000/2002): и куча ромбов с вопросами - что-то с кодировкой)
Как быть, подскажите, пожалуйста.
Если я правильно понял то надо так:
Простой вариант(для линукса):
<?php
shell_exec(“ssh -f -L 3307:127.0.0.1:3306 user@remote_server sleep 60 >> logfile”);
$db = mysqli_connect(‘127.0.0.1’, ‘sqluser’, ‘sqlpassword’, ‘database’, 3307);
Взят отсюда https://blog.rjmetrics.com/2009/01/06/php-mysql-and-ssh-tunneling-port-forwarding/
Не уверен как оно будет работать с ssh2
И если верить http://stackoverflow.com/questions/309615/connect-to-a-mysql-server-over-ssh-in-php то, ни как не будет.
Ну и страница проекта утверждает что библиотека не стабильна...
Как вариант для пользователя windows. Создайте туннель в putty.
http://www.akadia.com/services/ssh_putty.html
Привяжите на локальный порт 3037
А ваш код прост станет:
<?php
$db = mysqli_connect(‘127.0.0.1’, ‘sqluser’, ‘sqlpassword’, ‘database’, 3307);
У putty
есть интерфейс через командную строку нак что вполне можно использовать shell_exec
.
У меня один вопрос, зачем вам это? Зачем с локального компьютера к базе удаленной подключаться?
попробуйте $connection_mysql = new mysqli($db_hostname, $db_username, $db_password, $db_database, $db_port, $ssh_tunnel);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Разбираюсь с CentOS, вопрос такойУ меня проект написаный на php, по логике которого мне нужно автоматизировать делать некоторые действия командной...
Добрый день, ребятЕсть массив, назовем его UserArticleList, вот его вардамп:
В приложении вызываю окно отправки формы, пытаюсь передать в нее контроллер, но он не передается, в чем ошибка?
Есть скрипт помогающий оформить код при редактировании https://jsfiddlenet/L5qhzdh7/