[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не могу пробросить SSH тунель
Страницы: 1, 2
GET
Привет, хочу напрямую через скрипт пробросить тунель до БД на сервере через локалхост, делаю так:

        shell_exec("ssh -f -L 3307:127.0.0.1:3306 root@1.333.4.555 sleep 60 >> logfile");
$db = mysqli_connect('127.0.0.1', 'root', '555555555', 'DB',3307);


так делают, например прочитал здесь:

но почему то не коннектится, puTTY предлагать не надо, хочу через скрипт напрямую сделать.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
paul85
А что команда выдает из консоли? Как организована авторизация, через сертификат?
GET
paul85

Я без консоли напрямую, через скрипт соединяюсь:
Цитата
shell_exec("ssh -f -L 3307:127.0.0.1:3306 root@1.333.4.555 sleep 60 >> logfile");

открывется окно на 60 секунд
Цитата
$db = mysqli_connect('127.0.0.1', 'root', '555555555', 'DB',3307);

цепляюсь к локалхосту к 3307 порту, который перенаправляет в открывшийся тунель

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
paul85
окно надо думать хочет пароль?
GET
Цитата
окно надо думать хочет пароль?


куда его засовывать?

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
Вот еще вариант:

http://www.experts-exchange.com/Programmin...Q_26619790.html

но глючный т.к. в итоге тоже самое получается

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
Вопрос снят. Кому надо:

$connect = ssh2_connect('111.227.433.28', 22);
if(ssh2_auth_password($connect, 'user_ssh', '**************'))
{
echo'<br>...<br>SSH: connect.';
$connect = new mysqli('111.227.433.28', 'user_mysql', '*****', 'DB');
if (!$connect->connect_errno)
{
if($connect->character_set_name()!=='utf8')$connect->set_charset('utf8');//проверяем кодировку
echo'<br>...<br>MySQL: connect.';
}
else echo'<br>...<br>MySQL: disconnect.';
}
else echo'<br>...<br>SSH: disconnect.';




_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
Блин!...это ж не SSH получилось соединение smile.gif. Отбой расслаблятся.

хотя не уверен, что не SSH

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
Чего-то даже через puTTY не получается.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
paul85
ABC, пароль только руками можно запихнуть, в открывшемся окне. Либо сделать авторизацию по ключам, тогда ввод пароля не требуется. В любом случае, ваш первый вариант - это инициализация туннеля. Он никуда не денется, после завершения скрипта. То есть неплохо бы следить за его состоянием. Поэтому проще поддерживать туннель вне PHP, скажем с помощью утилиты autossh. Ну это как пример...

А во втором варианте, боюсь, что ssh вообще непричем. То есть вы же перезаписываете ресурс ssh2 на экземпляр mysqli. Тут получается вся конструкция SSH как бы лишняя. Ну подключение к MySQL происходит только после верно введенного пароля, насколько я вижу. Но само соединение SSH и MySQL никакого отношения друг к другу с точки зрения передачи данных не имеют.
GET
Цитата
А во втором варианте, боюсь, что ssh вообще непричем.

Цитата
Блин!...это ж не SSH получилось соединение .


В сети есть примеры нерабочие, как умудряются без сторонних утилит его проложить, чисто скриптом... чисто файлы же можно сделать,почему запрос MySQL нельзя не понятно. Понятно что пароль надо вводить.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
Не могу понять, почему так? Почему должен использоватьсь всякие костыли чтоб удаленно и безопасно подключится к БД.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
paul85
Ааа, нет, я ошибся. Оказывается уничтожается ssh туннель после 60-ти секунд. Вообще-то должно работать! Я вот сейчас проверил с Linux на Linux - нормально всё. Туннель строится. Соединение есть. Пароль спрашивает.

В чем именно загвоздка? Клиентская ОС какая, не винда случайно?
А чтобы без пароля работало - нужно авторизацию по ключам делать.

P.s. Я просто неочень понял суть проблемы, если честно... =)
paul85
Я обычно делаю еще проще. С помощью сервиса dyndns.org. На клиентской машине ставлю dyndns клиента (извините за тавтологию). Далее на сервере запускается раз в 5 минут скрипт, который резолвит имя и прописывает (обновляет) в фаерволе правило - "на этот IP адрес открыть всё". А остальному миру открыт лишь порт 80. Очень удобно, достаточно безопасно и никаких проблем. =)

Может быть ну их нафиг туннели? С ними мороки гораздо больше...
GET
Цитата
В чем именно загвоздка? Клиентская ОС какая, не винда случайно?


Да винда.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.