Mysql + SSH Tunnel! Помогите!

NastasiaD

Новичок
Mysql + SSH Tunnel! Помогите!

Есть несколько удаленных серверов с БД MySQL. Переодически надо собирать данные из этих баз. IPшники машин лежат в БД-табличке на localhost. Хочется по всем записям этой таблицы делать ssh tunnel на удаленные машины (соответствующие логины/пароли имеются), собирать данные и закрывать туннель. На локальной машине mysql сервиса нет и быть не должно. Воспользовавшись документацией рнр делаю ssh tunnel:

$connection = ssh2_connect('IP', 21);
ssh2_auth_pubkey_file($connection, 'LOGIN', '/PATH/TO/.ssh/id_rsa.pub', '/PATH/TO/.ssh/id_rsa');
$tunnel = ssh2_tunnel($connection, 'IP', 3306);

в результате получаем сокет-соединение. Далее подставляем этот сокет вместо localhost:port в mysql_connect(). Коннект к базе не получается. Помогите в чем проблема? Неужели и правда сокеты работают только с localhostом?

Когда просто в шеле пишу ssh -C -L 3306:IP:3306 IP -l LOGIN -p 21
а потом в скрипте сразу mysql_connect("localhost:3306"....) то все хорошо.

Я понимаю, что можно с помощью второго варианта все настроить, но в задаче принципиально, что IPшники лежат в базе и надо брать их оттуда.
 

WP

^_^
NastasiaD
Конечно не получается, а что Вы хотели? Берите IP-адреса из базы, создавайте туннель исполняя команду через [m]system[/m], и подключайтесь.
 

NastasiaD

Новичок
Делала и через system, в консоли запускаю php -f ***.php. туннель то устанавливается и все как бы подвисает и никакой дальнейший вывод не идет. те на дальнейших шагах алгоритма идет проверочный вывод echo, так вот ничего не выводится. Как это обойти? Может глупый вопрос, но я еще плохо соображаю в юниксах, туннелях и рнр:(
Как-то все это надо направить в другой поток, верно? но как????
 

WP

^_^
Правильно мыслите. Чтобы перенаправить в другой поток: system('command > /dev/null &');
Тогда PHP не будет ждать окончания выполнения command.
 

NastasiaD

Новичок
Спасибо!!!! Все заработало.
Только осталось научится убивать созданный ssh-ем процесс:)
 
Сверху