Доступ к БД через SSH-туннель

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Доступ к БД через SSH-туннель

Сообщение Владимир » 17.09.2010 16:51:21

Господа-граждане, доброго!
Присоветуйте, как быть.
Дано: есть БД MySql на хостинге провайдера, к которой разрешен доступ только по SSH-туннелю.
В режиме командной строки (логин,пароль) вхожу в систему по SSH, далее вхожу в MySql (снова пользователь-логин-пароль)- все работает (select, update, etc).
Задача: как все это реализовать из софта Lazarus? - чтобы работать непосредственно с БД на хостинге. Я так понимаю, что libc.system надо использовать?
Спасибо.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Доступ к БД через SSH-туннель

Сообщение MageSlayer » 17.09.2010 20:38:01

Ну дык и сделай скрипт, который будешь запускать ssh перед логином с пробросом порта.
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Доступ к БД через SSH-туннель

Сообщение Владимир » 17.09.2010 21:02:30

MageSlayer писал(а):Ну дык и сделай скрипт, который будешь запускать ssh перед логином с пробросом порта.


Круто. А потом как объяснить компоненту доступа к БД (у меня Zeos), чтобы общался с БД сайта? Может, чего-то не понимаю?

Добавлено спустя 2 минуты 30 секунд:
MageSlayer писал(а):Ну дык и сделай скрипт, который будешь запускать ssh перед логином с пробросом порта.

Народ утверждает, что после проброса порта работа с БД идет как с localhost... Может, здесь копать?
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Доступ к БД через SSH-туннель

Сообщение MageSlayer » 17.09.2010 21:17:12

Владимир писал(а):Добавлено спустя 2 минуты 30 секунд:
MageSlayer писал(а):Ну дык и сделай скрипт, который будешь запускать ssh перед логином с пробросом порта.

Народ утверждает, что после проброса порта работа с БД идет как с localhost... Может, здесь копать?


Народ плохого не посоветует. Все верно.
Проброс порта и есть открытие соединения-туннеля через ssh. На стороне клиента открывается порт. И уже через localhost:[локальный_порт] идет работа.

См. man ssh ключ -L
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Доступ к БД через SSH-туннель

Сообщение Владимир » 17.09.2010 21:32:24

MageSlayer писал(а):
Владимир писал(а):Добавлено спустя 2 минуты 30 секунд:
MageSlayer писал(а):Ну дык и сделай скрипт, который будешь запускать ssh перед логином с пробросом порта.

Народ утверждает, что после проброса порта работа с БД идет как с localhost... Может, здесь копать?


Народ плохого не посоветует. Все верно.
Проброс порта и есть открытие соединения-туннеля через ssh. На стороне клиента открывается порт. И уже через localhost:[локальный_порт] идет работа.

См. man ssh ключ -L


Спасибо, но специально для бестолковых: написал скрипт для проброса порта, а как в скрипте
указать пароль для ввода?
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Доступ к БД через SSH-туннель

Сообщение MageSlayer » 17.09.2010 22:01:55

Владимир писал(а):Спасибо, но специально для бестолковых: написал скрипт для проброса порта, а как в скрипте
указать пароль для ввода?


Код: Выделить всё
#!/bin/bash

export SSH_ASKPASS="/tmp/2.sh" # сюда подставляем скрипт, который выдает пароль в STDOUT
export DISPLAY=":0" # надо даже если у вас нету X
setsid ssh  -L 10000:localhost:21 denis@server cat -

... и коннектимся к localhost:10000
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Доступ к БД через SSH-туннель

Сообщение Владимир » 17.09.2010 22:06:17

Спасиб! Пробую
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Доступ к БД через SSH-туннель

Сообщение Владимир » 20.09.2010 20:51:10

MageSlayer писал(а):
Владимир писал(а):Спасибо, но специально для бестолковых: написал скрипт для проброса порта, а как в скрипте
указать пароль для ввода?


Код: Выделить всё
#!/bin/bash

export SSH_ASKPASS="/tmp/2.sh" # сюда подставляем скрипт, который выдает пароль в STDOUT
export DISPLAY=":0" # надо даже если у вас нету X
setsid ssh  -L 10000:localhost:21 denis@server cat -

... и коннектимся к localhost:10000


Пробовал по-разному - не помогает, либо я чего-то не знаю (наверняка). В написании скриптов не силен.
Просмотрел, чего смог - народ рекомендует использовать Expect - якобы утилита прямо предназначена для имитации интерактивного входа...
Тоже не сильно получилось!
Хочу принципиальный вопрос задать/решить - из софта Lazarus возможна ли работа с БД через SSH ? Есть сомнения..
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Доступ к БД через SSH-туннель

Сообщение MageSlayer » 20.09.2010 22:00:54

Что конкретно не получается?
Все работает, технологии ssh уже лет 15.
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Доступ к БД через SSH-туннель

Сообщение Владимир » 21.09.2010 09:17:11

MageSlayer писал(а):Что конкретно не получается?
Все работает, технологии ssh уже лет 15.


Из командной строки все работает - туннель, доступ к БД...
Вопрос, как это же реализовать из софта Lazarus? Сымитировать интерактивный вход в туннель, затем в БД.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Доступ к БД через SSH-туннель

Сообщение MageSlayer » 21.09.2010 09:41:45

Владимир писал(а):Из командной строки все работает - туннель, доступ к БД...
Вопрос, как это же реализовать из софта Lazarus? Сымитировать интерактивный вход в туннель, затем в БД.


Не надо ничего имитировать.
Старт твоей программы->старт скрипта->старт коннекта к базе.

Как запустить скрипт см. ниже
http://wiki.lazarus.freepascal.org/Exec ... l_Programs
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Доступ к БД через SSH-туннель

Сообщение Владимир » 21.09.2010 09:59:47

С написанием скриптов не сильно знаком.

Код: Выделить всё
    #!/bin/bash

    export SSH_ASKPASS="/tmp/2.sh" # сюда подставляем скрипт, который выдает пароль в STDOUT
    export DISPLAY=":0" # надо даже если у вас нету X
    setsid ssh  -L 10000:localhost:21 denis@server cat -



Вопрос по скрипту /tmp/2.sh - что в нем? Одна строка my_passw > /path/filename ?

Добавлено спустя 9 часов 31 минуту 12 секунд:
При использовании expect пишу
Код: Выделить всё
#!/usr/bin/expect -f
set my_password "xxxxxxx"

spawn ssh -L 22:127.0.0.1:3306 login@ssh.host.ru # послали запрос
expect -re "password:" # ждем приглашения на ввод пароля
send "$my_password\r" # послали пароль
expect eof # ожидаем конца сеанса??????


При старте скрипта в командной строке все отрабатывает, т.е. появляется приглашение % удаленного сервера,
однако секунд через 10 - отваливается, никакие команды не отрабатываются
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Доступ к БД через SSH-туннель

Сообщение MageSlayer » 21.09.2010 20:13:20

Владимир писал(а):С написанием скриптов не сильно знаком.

Код: Выделить всё
    #!/bin/bash

    export SSH_ASKPASS="/tmp/2.sh" # сюда подставляем скрипт, который выдает пароль в STDOUT
    export DISPLAY=":0" # надо даже если у вас нету X
    setsid ssh  -L 10000:localhost:21 denis@server cat -



Вопрос по скрипту /tmp/2.sh - что в нем? Одна строка my_passw > /path/filename ?


Да. Одна строка. Или что-то более продвинутое, типа чтение (source в баше) конфига с настройками.

Код: Выделить всё
    #!/bin/bash
    echo пароль
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Доступ к БД через SSH-туннель

Сообщение Владимир » 21.09.2010 23:15:44

Всем доброго!
Докладываю: expect, видимо, хорошая вещь, только предназначена для "законченных" операций (dump базы, например). Мне же нужно "удерживать" туннель для работы с БД.
Сделал скрипт /bin/bash с export, как советовал MageSlayer - все получилось. В командной строке все здорово - вхожу на удаленный сервер! Однако в софте Lazarus вызываю libc.system(путь к скрипту) - и ничего не происходит (т.е. в процессах не вижу вызова). Аналогично при попытке запуска
Код: Выделить всё
AProcess:=TProcess.Create(Nil);
AProcess.CommandLine:='/home/volod/ssh_conn1';
AProcess.Options:=AProcess.Options+[poWaitOnExit];
AProcess.Execute;     

тоже никакого эффекта. Подскажите пож, что не так?
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Доступ к БД через SSH-туннель

Сообщение Kitayets » 22.09.2010 00:13:29

Очевидно что /home/volod/ssh_conn1 - это bash скрипт?

тогда строка запуска должна быть:
/bin/bash /home/volod/ssh_conn1

попробуйте
Код: Выделить всё
AProcess.CommandLine:='/bin/bash /home/volod/ssh_conn1';
Kitayets
постоялец
 
Сообщения: 171
Зарегистрирован: 05.05.2010 21:15:24

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru