|
PuTTY. Как использовать из 1С? | ☑ | ||
---|---|---|---|---|
0
cube033
16.04.13
✎
08:31
|
День добрый. Стоит задача - наполнить БД сайта данными из 1С.
База сайта лежит на masterhost.ru (uХХХХХХ.mysql.masterhost.ru) Как следует из названия темы - masterhost.ru защищен от подключения извне: "В целях безопасности прямой доступ к серверам MySQL из интернета закрыт (исключение составляет ssh-туннель)" и они советуют PuTTy и даже приводят настройки (http://masterhost.ru/support/doc/mysql/). Подключение готово - авторизацию проходит. Запуск с ключами работает. А что дальше? Открывается окно консоли с приглашением удаленного сервера. Вдохновившись подобными темами на Мисте родился такой код: ЗапуститьПриложение("""C:\хххх\PuTTY-0.62-RU-9\putty.org.ru\PuTTY\PuTTY.exe"" -load хххх -l uХХХХХХ -pw хххх"); ConString = "Driver={MySQL ODBC 3.51 Driver};SERVER=uХХХХХХ.mysql.masterhost.ru;Port=22;Database=uХХХХХХ_newgard;Uid=uХХХХХХ_1c;PWD=хххххх;"; Остальной код естественно присутствует, но не принципиален. При выполнении кода опять же открывается окно консоли, проходит авторизация. Тем временем 1С пытается подключиться. Ошибка: "{Форма.Форма(17)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 3.51 Driver]Can't connect to MySQL server on 'uХХХХХХ.mysql.masterhost.ru' (10013)" 10013 - касается прав/разрешений. При попытке подключится на любой другой порт (либо 22, либо в PuTTY указать локальный порт не 3306, а любой другой и пробовать подключится к нему) ошибка (10060) - касается свойств подключения. Подскажите пожалуйста - в какую сторону думать? Как связать PuTTY и 1С? |
|||
1
cube033
16.04.13
✎
08:33
|
В ConString - Port=3306. Скопировал не ту строку.
|
|||
2
mikecool
16.04.13
✎
08:33
|
копай в сторону командной строки пути...
но все равно - изврат |
|||
3
vde69
16.04.13
✎
08:39
|
при подключению к мускулю с разношерстными правами следует использовать префиксое имя базы
[DBA][ИмяБазы] и в последствии во всех запросах следует явно указывать [DBA][ИмяБазы][ИмяТаблицы] я на выяснение сего факта потратил уйму времени, нигде не описано... |
|||
4
shuhard
16.04.13
✎
08:39
|
(0)[Как связать PuTTY и 1С?]
их не надо связывать 1С работает с СУБД через ADODB ADODB пофиг есть туннель или нет |
|||
5
mikecool
16.04.13
✎
08:40
|
(3) ой ли нигде не описано? открой справку по т-скл - в описании синтаксиса все есть
|
|||
6
mikecool
16.04.13
✎
08:41
|
+5 если бы пришлось писать запросы к другим инстансам - столкнулся бы сразу
|
|||
7
shuhard
16.04.13
✎
08:42
|
(5) а каким боком Т-SQL связан с MySQL ?
|
|||
8
vde69
16.04.13
✎
08:43
|
(5) ну это было лет 12 назад, сам допер методом тыка, а понял ПОЧЕМУ так уже сильно потом :)
|
|||
9
Klesk
16.04.13
✎
08:44
|
(0) задумайтесь об обмене через ftp или http
иначе это и правда изврат |
|||
10
mikecool
16.04.13
✎
08:49
|
(7) а чо, не связаны? синтаксис то один и тотже в декларировании декста запроса, просто скуль выдает некие поблажки
|
|||
11
mikecool
16.04.13
✎
08:49
|
текста*
|
|||
12
shuhard
16.04.13
✎
08:51
|
(10) это не так, совсем
|
|||
13
mikecool
16.04.13
✎
08:53
|
(12) наверное... но описанги таблицы для выборки одинаково [DBA][ИмяБазы][ИмяТаблицы] везде
|
|||
14
cube033
16.04.13
✎
08:53
|
(4)
Так оно и было изначально Connection = Новый COMОбъект("ADODB.Connection"); Connection.CommandTimeOut= 30; Connection.Open(ConString); и так впервые появилась ошибка 10013 Я подсматриваю способ в т.ч. из готового проекта, который на данный момент заброшен и не работает, и там в папочке я и нашел ПуТТи, проблема в том, что я так и не знаю - добились ли люди, у которых я подсматриваю метод, результата. Я общаюсь с разработчиками искомого сайта, которые в свою очередь общаются с хостером БД. И вот ответ от МастерХост: "Да, похоже и правда прийдётся использовать PuTTY, доступ возможен только через ssh-туннель" |
|||
15
cube033
16.04.13
✎
08:55
|
Точнее это ответ разработчика сайта
|
|||
16
ЧашкаЧая
16.04.13
✎
08:59
|
Нужно создать ssh-тунель к базе посредством putty, гуглится на раз. ADO не может знать как подключиться через ssh.
|
|||
17
mistеr
16.04.13
✎
09:05
|
(0) Для того, чтобы подключаться через ssh туннель, сначала нужно его поднять. Для этого используется plink, а PuTTY для интерактивной работы. Как создавать туннели расписано в доке к PuTTY. То есть схема такая.
1. Сначала запускаем что-то типа plink -i файл_с_ключем -L 3306:localhost:3306 uХХХХХХ@uХХХХХХ.mysql.masterhost.ru 2. Ждем немного, убеждаемся, что процесс не завершился быстро с ошибкой. 3. Ломимся через ADO на localhost:3309 |
|||
18
mistеr
16.04.13
✎
09:06
|
(17) 3309->3306
|
|||
19
cube033
16.04.13
✎
09:11
|
(16)
"Нужно создать ssh-тунель к базе посредством putty" Что еще для этого нужно, кроме того что описано в (0)? (17) "а PuTTY для интерактивной работы" -т.е. ответ на заголовок темы - НИКАК? Судя по этой схеме PuTTY вообще не причем. |
|||
20
cube033
16.04.13
✎
09:14
|
(16) Всмысле - подключение настроено, окно консоли открыто, логин/пароль введены, авторизация успешна, надпись Welcome!, строка приглашение. [uхххххх@gen44 ~]$
На этот момент туннель не создан? |
|||
21
mistеr
16.04.13
✎
09:23
|
(19) ОК, немного ликбеза.
1. plink это утилита из состава PuTTY (продукт), она для батников и автоматизации. putty другая утилита из состава PuTTY, она для интерактива. 2. SSH сервер может предоставлять несколько сервисов, вообще говоря друг с другом не связанных. Такие как: * консоль с шеллом * туннели * SFTP Тебе для твоей задачи нужен только один туннель. для этого plink подходит лучше. Но туннель можно создать и c putty, если очень хочется. |
|||
22
cube033
16.04.13
✎
09:26
|
Спасибо. Ликбез и правда нужен. Пробую.
|
|||
23
cube033
16.04.13
✎
09:34
|
Параметры запуска Plink.exe плохо гуглятся, можете подсказать или дать ссылку?
|
|||
24
mistеr
16.04.13
✎
10:13
|
(23) http://the.earth.li/~sgtatham/putty/0.62/htmldoc/Chapter7.html#plink
Ключевые - те же, что и у putty. Можно все отладить с putty (тут же консоль, удобно смотреть логи мускула), а потом заменить на plink. |
|||
25
cube033
16.04.13
✎
11:22
|
Спасибо.
|
|||
26
cube033
16.04.13
✎
11:57
|
ЗапуститьПриложение("""C:\xxxx\PuTTY\plink.exe""-load Sadovod -l xxxxxx -pw xxxxxxx");
ConString = "Driver={MySQL ODBC 3.51 Driver};SERVER=xxxxxx.mysql.masterhost.ru;Port=3036;Database=uxxxxxx_newgard;Uid=uxxxxx_1c;PWD=xxxxxxx;"; Connection = Новый COMОбъект("ADODB.Connection"); Connection.CommandTimeOut= 30; Connection.Open(ConString); plink.exe работает точно также, как PuTTY.exe с параметрами. То же самое окно консоли. Та же самая ошибка. Ничего принципиально нового не увидел. А главное - как происходит взаимодействие? По какому принципу? После запуска правильно настроенного ПуТТИ - Моя ОС - слушает обращение к 3306 (или другому указанному) и перенаправляет его на указанный сервер? |
|||
27
mistеr
16.04.13
✎
12:21
|
Мда, шаг 2 ты конечно пропустил. И в шаге 3 напутал.
>То же самое окно консоли. Добавь ключ -N >как происходит взаимодействие? После создания туннеля plink/putty слушает указанный порт на клиенте, и весь трафик пересылает через туннель на указанные хост/порт. В резульате для 1С все выглядит так, как будто MySQL работает на этой же машине, на localhost:3306. Теперь сам догадайся, что нужно вписать в ConString. |
|||
28
cube033
16.04.13
✎
12:57
|
-N приводит к тому, что открывается то самое окно - просто дальше вывода логина дело не идет.
"Шаг 2 пропустил" - если речь идет о -ssh, то -load Sadovod загружает сессию, в которой указано, что SSH подключение по 22 порту к серверу xxxx.ssh.masterhost.ru, а в разделе туннели говорится ,что локальный порт 3306, Назначение uхххххх.mysql.masterhost.ru:3306. Не представляю, что можно дописать в ConString............... ............................................................ Включил мозг и перечитал (27). Теперь представляю))) Спасибо все заработало!!!!!! ConString = "Driver={MySQL ODBC 3.51 Driver};SERVER=localhost;Port=3306;Database=uхххх_newgard;Uid=uххххх_1c;PWD=ххххххх;"; |
|||
29
cube033
19.04.13
✎
09:39
|
Всё отлично работает - только не могу решить последнюю проблему. Кто сталкивался с plink.exe - подскажите как её запустить в свернутом режиме или вообще без окна)
-N не помогает. Окно открывается, авторизация не происходит либо не отображается. Или может у 1С есть параметр - запуск приложения в свернутом состоянии? |
|||
30
SanGvin
19.04.13
✎
10:03
|
(14) зря подсматриваешь там, г-код, зарисовка так сказать))
(29) WSHShell = Новый COMОбъект("WScript.Shell"); WSHShell.Run("твое творчество",0); |
|||
31
cube033
19.04.13
✎
13:44
|
(30) Спасибо. Тоже нашел этот способ, только у меня:
WSHShell.Run("твое творчество",7,0); Теперь думаю над Terminate. Приложение = WSHShell.Run("твое творчество",7,0); Приложение.Terminate(); - не работает. Без скобок тоже не работает. |
|||
32
Абырвалг
19.04.13
✎
13:45
|
ws вам помогут
|
|||
33
cube033
19.04.13
✎
14:01
|
(31) такой способ обречен, ибо тип переменной "Приложение" - число. В мануалах с терминатором используют открытие через Exec, а не Run.
Но Exec - не позволяет запустить в свернутом состоянии. Надо искать дальше. |
|||
34
cube033
19.04.13
✎
14:28
|
Да блин, что же за напасть?!
Уже согласился на Exec, пусть окошко консоли появляется, а потом закрывается. Так ведь Exec не поддерживает запуск с параметрами! Может кто знает лекарство от моей беды? |
|||
35
SanGvin
20.04.13
✎
08:56
|
(34) эм... а
taskkill /im plink.exe потом вызывать религия не позволяет? или это не подходит? |
|||
36
Ковычки
20.04.13
✎
09:20
|
putty -L 33306:uХХХХХХ.mysql.masterhost.ru:3306 усер@uХХХХХХ.mysql.masterhost.ru -pw пароль -N
Driver={MySQL ODBC 3.51 Driver};SERVER=127.0.0.1;Port=33306;Database=uХХХХХХ_newgard;Uid=uХХХХХХ_1c;PWD=хххххх |
|||
37
Ковычки
20.04.13
✎
10:05
|
|
|||
38
Ковычки
20.04.13
✎
12:07
|
|
|||
39
cube033
23.04.13
✎
14:54
|
(38) Спасибо огромное!
Не понимаю каким образом это работает, но это работает. У меня это в разных процедурах и покомпактнее. ЗапускТуннеля ШелСкрипт = Новый COMОбъект("WScript.Shell"); КоманднаяСтрока = """C:\...\PuTTY\plink.exe"" -load Sadovod -l ххх -pw ххх ""mkfifo ~/tunnel.pid; echo $$ > ~/tunnel.pid; read;"""; КоманднаяСтрока=ШелСкрипт.ExpandEnvironmentStrings(КоманднаяСтрока); ШелСкрипт.Run(КоманднаяСтрока,0,Ложь); УбитьТоннель ШелСкрипт = Новый COMОбъект("WScript.Shell"); КоманднаяСтрока = """C:\...\PuTTY\plink.exe"" -load Sadovod -l ххх -pw ххх ""kill -9 `cat ~/tunnel.pid`; sleep 1;"""; КоманднаяСтрока=ШелСкрипт.ExpandEnvironmentStrings(КоманднаяСтрока); ШелСкрипт.Run(КоманднаяСтрока,0,Истина); |
|||
40
lavrov
23.04.13
✎
15:00
|
Специально для мастер хоста.
функция ПодключитьSSH() экспорт ПутьPytty=ПолучитьИмяВременногоФайла("exe"); ПутьФайлу=Новый Файл (ПутьPytty); макет=ПолучитьОбщийМакет("putty"); макет.Записать(ПутьPytty); Если ПутьФайлу.Существует() Тогда ИмяСкрипта=ПолучитьИмяВременногоФайла("vbs"); Скрипт = Новый ЗаписьТекста(ИмяСкрипта, КодировкаТекста.ANSI); СтрокаВыполнения=" | File = """+ПутьPytty+""" |"; СтрокаВыполнения=СтрокаВыполнения+" | Set ws = Wscript.CreateObject(""Wscript.Shell"") | CommandString = """""""" &File& """""" -ssh -l uххххххх -pw пароль -L 3306:хххххх.mysql.masterhost.ru:3306 u333431.ssh.masterhost.ru "" | 'MsgBox (CommandString) | Return = ws.Run(CommandString, 1, TRUE) | |"; // Скрипт.Записать(СтрокаВыполнения); // Скрипт.Закрыть(); cmdLine="wscript.exe "+ИмяСкрипта; WshShell = Новый COMОбъект("WScript.Shell"); Попытка WshShell.Run(cmdLine, 0, "False"); исключение КонецПопытки; Общий.ПаузаВыполения(5); попытка УдалитьФайлы(ИмяСкрипта); исключение КонецПопытки; иначе Сообщить("Программма putty не найдена"); КонецЕсли; возврат ПутьФайлу; КонецФункции функция ОтключитьSSH(ПутьКФайлу) экспорт ИмяСкрипта=ПолучитьИмяВременногоФайла("vbs"); Скрипт = Новый ЗаписьТекста(ИмяСкрипта, КодировкаТекста.ANSI); СтрокаВыполнения=" | File = """+ПутьКФайлу.Имя+""" |"; СтрокаВыполнения=СтрокаВыполнения+" | Set ws = Wscript.CreateObject(""Wscript.Shell"") | CommandString = ""taskkill /F /IM """""" &File& """""""" | 'MsgBox (CommandString) | Return = ws.Run(CommandString, 1, TRUE) | |"; // Скрипт.Записать(СтрокаВыполнения); // Скрипт.Закрыть(); cmdLine="wscript.exe "+ИмяСкрипта; WshShell = Новый COMОбъект("WScript.Shell"); Попытка WshShell.Run(cmdLine, 0, "False"); исключение КонецПопытки; Общий.ПаузаВыполения(3); попытка УдалитьФайлы(ПутьКФайлу.ПолноеИмя); УдалитьФайлы(ИмяСкрипта); исключение КонецПопытки; КонецФункции |
|||
41
cube033
13.05.13
✎
10:31
|
Подскажите пожалуйста примерчик или толковое описание параметров запуска plink.exe
пробую из cmd.exe Говорит: Фатальная ошибка: Server refused to start a shell/command Вот строка: ""C:\ххх\plink.exe"" -ssh -L 3306:uххххх.ssh.masterhost.ru:3306 uххххх@uххххх.ssh.masterhost.ru -pw хххххх Как я понимаю эту строку. Открой программу plink.exe, используй ssh протокол, перенаправляй все обращения на локальный порт 3306 по адресу ssh хоста на 3306 порт. а конструкцию ххх@xxx не совсем понимаю, да и неважно - я пробовал и ssh и mysql хост, ошибка где-то в другом месте Еще иногда говорит: ?°шсър ёхЄш: ?Ёхь юцшфрэш ёюхфшэхэш шёЄхъыю - но тут я его совсем понимаю. |
|||
42
mistеr
13.05.13
✎
16:47
|
(41) "Server refused" ни на что не намекает? Сервер не дает тебе шелл. Тебе он и не нужен, поэтому не надо просить. Не просить шелл это ключ -N, я давно про него сказал, а ты проигнорил.
>конструкцию ххх@xxx не совсем понимаю. Это есть в любом описании, даже самом бестолковом. Даже если просто запустсть plink, оно сразу выскакивает. Делаю вывод, что ты и не пытался читать. |
|||
43
cube033
14.05.13
✎
08:14
|
(42) Серьезно, сколько раз я писал про то что пробовал -N и не к чему полезному это не приводило?
Про конструкцию ххх@xxx действительно есть в каждом описании (которых я прочитал больше 10) как "параметры подключения". Вопрос в том что мне нужно подключиться к SSH серверу для тоннеля и mysql серверу для обращения к базе, поэтому и не понимаю какой сервер указывать именно в этой конструкции. Немного запутал (38), так как там Дважды указывается "Хост" как одна переменная. Копания в интерфейсе Путти привели меня к выводу что для -L указывается mysql хост, а для конструкции xxx@xxx - ssh хост. Про "Server refused" мне намекает, что сервер мне отказал, но не намекает на причину. Ошибка возникает даже при подключении из интерфейса Путти, такого раньше не было. А все дело в том что сервер загружен, так как в данный момент выполняется моя обработка,которая выбгружает все изображения из базы (базе 6 лет) на FTP, делая preview и записывая инфу в БД сайта. Рассчетное время выполнение обработки - 25 часов. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |