Доступ к БД через SSH-туннель
Модератор: Модераторы
Доступ к БД через SSH-туннель
Господа-граждане, доброго!
Присоветуйте, как быть.
Дано: есть БД MySql на хостинге провайдера, к которой разрешен доступ только по SSH-туннелю.
В режиме командной строки (логин,пароль) вхожу в систему по SSH, далее вхожу в MySql (снова пользователь-логин-пароль)- все работает (select, update, etc).
Задача: как все это реализовать из софта Lazarus? - чтобы работать непосредственно с БД на хостинге. Я так понимаю, что libc.system надо использовать?
Спасибо.
Присоветуйте, как быть.
Дано: есть БД MySql на хостинге провайдера, к которой разрешен доступ только по SSH-туннелю.
В режиме командной строки (логин,пароль) вхожу в систему по SSH, далее вхожу в MySql (снова пользователь-логин-пароль)- все работает (select, update, etc).
Задача: как все это реализовать из софта Lazarus? - чтобы работать непосредственно с БД на хостинге. Я так понимаю, что libc.system надо использовать?
Спасибо.
-
MageSlayer
- постоялец
- Сообщения: 216
- Зарегистрирован: 07.09.2006 12:30:44
Ну дык и сделай скрипт, который будешь запускать ssh перед логином с пробросом порта.
MageSlayer писал(а):Ну дык и сделай скрипт, который будешь запускать ssh перед логином с пробросом порта.
Круто. А потом как объяснить компоненту доступа к БД (у меня Zeos), чтобы общался с БД сайта? Может, чего-то не понимаю?
Добавлено спустя 2 минуты 30 секунд:
MageSlayer писал(а):Ну дык и сделай скрипт, который будешь запускать ssh перед логином с пробросом порта.
Народ утверждает, что после проброса порта работа с БД идет как с localhost... Может, здесь копать?
-
MageSlayer
- постоялец
- Сообщения: 216
- Зарегистрирован: 07.09.2006 12:30:44
Владимир писал(а):Добавлено спустя 2 минуты 30 секунд:MageSlayer писал(а):Ну дык и сделай скрипт, который будешь запускать ssh перед логином с пробросом порта.
Народ утверждает, что после проброса порта работа с БД идет как с localhost... Может, здесь копать?
Народ плохого не посоветует. Все верно.
Проброс порта и есть открытие соединения-туннеля через ssh. На стороне клиента открывается порт. И уже через localhost:[локальный_порт] идет работа.
См. man ssh ключ -L
MageSlayer писал(а):Владимир писал(а):Добавлено спустя 2 минуты 30 секунд:MageSlayer писал(а):Ну дык и сделай скрипт, который будешь запускать ssh перед логином с пробросом порта.
Народ утверждает, что после проброса порта работа с БД идет как с localhost... Может, здесь копать?
Народ плохого не посоветует. Все верно.
Проброс порта и есть открытие соединения-туннеля через ssh. На стороне клиента открывается порт. И уже через localhost:[локальный_порт] идет работа.
См. man ssh ключ -L
Спасибо, но специально для бестолковых: написал скрипт для проброса порта, а как в скрипте
указать пароль для ввода?
-
MageSlayer
- постоялец
- Сообщения: 216
- Зарегистрирован: 07.09.2006 12:30:44
Владимир писал(а):Спасибо, но специально для бестолковых: написал скрипт для проброса порта, а как в скрипте
указать пароль для ввода?
Код: Выделить всё
#!/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 писал(а):Владимир писал(а):Спасибо, но специально для бестолковых: написал скрипт для проброса порта, а как в скрипте
указать пароль для ввода?Код: Выделить всё
#!/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 ? Есть сомнения..
-
MageSlayer
- постоялец
- Сообщения: 216
- Зарегистрирован: 07.09.2006 12:30:44
Что конкретно не получается?
Все работает, технологии ssh уже лет 15.
Все работает, технологии ssh уже лет 15.
MageSlayer писал(а):Что конкретно не получается?
Все работает, технологии ssh уже лет 15.
Из командной строки все работает - туннель, доступ к БД...
Вопрос, как это же реализовать из софта Lazarus? Сымитировать интерактивный вход в туннель, затем в БД.
-
MageSlayer
- постоялец
- Сообщения: 216
- Зарегистрирован: 07.09.2006 12:30:44
Владимир писал(а):Из командной строки все работает - туннель, доступ к БД...
Вопрос, как это же реализовать из софта Lazarus? Сымитировать интерактивный вход в туннель, затем в БД.
Не надо ничего имитировать.
Старт твоей программы->старт скрипта->старт коннекта к базе.
Как запустить скрипт см. ниже
http://wiki.lazarus.freepascal.org/Exec ... l_Programs
С написанием скриптов не сильно знаком.
Вопрос по скрипту /tmp/2.sh - что в нем? Одна строка my_passw > /path/filename ?
Добавлено спустя 9 часов 31 минуту 12 секунд:
При использовании expect пишу
При старте скрипта в командной строке все отрабатывает, т.е. появляется приглашение % удаленного сервера,
однако секунд через 10 - отваливается, никакие команды не отрабатываются
Код: Выделить всё
#!/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 - отваливается, никакие команды не отрабатываются
-
MageSlayer
- постоялец
- Сообщения: 216
- Зарегистрирован: 07.09.2006 12:30:44
Владимир писал(а):С написанием скриптов не сильно знаком.Код: Выделить всё
#!/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 пароль
Всем доброго!
Докладываю: expect, видимо, хорошая вещь, только предназначена для "законченных" операций (dump базы, например). Мне же нужно "удерживать" туннель для работы с БД.
Сделал скрипт /bin/bash с export, как советовал MageSlayer - все получилось. В командной строке все здорово - вхожу на удаленный сервер! Однако в софте Lazarus вызываю libc.system(путь к скрипту) - и ничего не происходит (т.е. в процессах не вижу вызова). Аналогично при попытке запуска
тоже никакого эффекта. Подскажите пож, что не так?
Докладываю: 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;
тоже никакого эффекта. Подскажите пож, что не так?
Очевидно что /home/volod/ssh_conn1 - это bash скрипт?
тогда строка запуска должна быть:
/bin/bash /home/volod/ssh_conn1
попробуйте
тогда строка запуска должна быть:
/bin/bash /home/volod/ssh_conn1
попробуйте
Код: Выделить всё
AProcess.CommandLine:='/bin/bash /home/volod/ssh_conn1';
