PuTTY. Как использовать из 1С? #661180


#0 by cube033
День добрый. Стоит задача - наполнить БД сайта данными из 1С. База сайта лежит на masterhost.ru (uХХХХХХ.mysql.masterhost.ru) Как следует из названия темы - masterhost.ru защищен от подключения извне: "В целях безопасности прямой доступ к серверам MySQL из интернета закрыт (исключение составляет ssh-туннель)" и они советуют PuTTy и даже приводят настройки (. Подключение готово - авторизацию проходит. Запуск с ключами работает. А что дальше? Открывается окно консоли с приглашением удаленного сервера. Вдохновившись подобными темами на Мисте родился такой код: Остальной код естественно присутствует, но не принципиален. При выполнении кода опять же открывается окно консоли, проходит авторизация. Тем временем 1С пытается подключиться. Ошибка: "{Форма.Форма}: Ошибка при вызове метода контекста (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 by cube033
В ConString - Port=3306. Скопировал не ту строку.
#2 by mikecool
копай в сторону командной строки пути... но все равно - изврат
#3 by vde69
при подключению к мускулю с разношерстными правами следует использовать префиксое имя базы [DBA][ИмяБазы] и в  последствии во всех запросах следует явно указывать [DBA][ИмяБазы][ИмяТаблицы] я на выяснение сего факта потратил уйму времени, нигде не описано...
#4 by shuhard
[Как связать PuTTY и 1С?] их не надо связывать 1С работает с СУБД через ADODB ADODB пофиг есть туннель или нет
#5 by mikecool
ой ли нигде не описано? открой справку по т-скл - в описании синтаксиса все есть
#6 by mikecool
+5 если бы пришлось писать запросы к другим инстансам - столкнулся бы сразу
#7 by shuhard
а каким боком Т-SQL связан с MySQL ?
#8 by vde69
ну это было лет 12 назад, сам допер методом тыка, а понял ПОЧЕМУ так уже сильно потом :)
#9 by Klesk
задумайтесь об обмене через ftp или http иначе это и правда изврат
#10 by mikecool
а чо, не связаны? синтаксис то один и тотже в декларировании декста запроса, просто скуль выдает некие поблажки
#11 by mikecool
текста*
#12 by shuhard
это не так, совсем
#13 by mikecool
наверное... но описанги таблицы для выборки одинаково [DBA][ИмяБазы][ИмяТаблицы] везде
#14 by cube033
Так оно и было изначально и так впервые появилась ошибка 10013 Я подсматриваю способ в т.ч. из готового проекта, который на данный момент заброшен и не работает, и там в папочке я и нашел ПуТТи, проблема в том, что я так и не знаю - добились ли люди, у которых я подсматриваю метод, результата. Я общаюсь с разработчиками искомого сайта, которые в свою очередь общаются с хостером БД. И вот ответ от МастерХост: "Да, похоже и правда прийдётся использовать PuTTY, доступ возможен только через ssh-туннель"
#15 by cube033
Точнее это ответ разработчика сайта
#16 by ЧашкаЧая
Нужно создать ssh-тунель к базе посредством putty, гуглится на раз. ADO не может знать как подключиться через ssh.
#17 by mistеr
Для того, чтобы подключаться через ssh туннель, сначала нужно его поднять. Для этого используется plink, а PuTTY для интерактивной работы. Как создавать туннели расписано в доке к PuTTY. То есть схема такая. 1. Сначала запускаем что-то типа plink -i файл_с_ключем -L 3306:localhost:3306 uХХХХХХ@uХХХХХХ.mysql.masterhost.ru 2. Ждем немного, убеждаемся, что процесс не завершился быстро с ошибкой. 3. Ломимся через ADO на localhost:3309
#18 by mistеr
3309->3306
#19 by cube033
"Нужно создать ssh-тунель к базе посредством putty" Что еще для этого нужно, кроме того что описано в ? "а PuTTY для интерактивной работы" -т.е. ответ на заголовок темы - НИКАК? Судя по этой схеме PuTTY вообще не причем.
#20 by cube033
Всмысле - подключение настроено, окно консоли открыто, логин/пароль введены, авторизация успешна, надпись Welcome!, строка приглашение. [uхххххх@gen44 ~]$ На этот момент туннель не создан?
#21 by mistеr
ОК, немного ликбеза. 1. plink это утилита из состава PuTTY (продукт), она для батников и автоматизации. putty другая утилита из состава PuTTY, она для интерактива. 2. SSH сервер может предоставлять несколько сервисов, вообще говоря друг с другом не связанных. Такие как: Тебе для твоей задачи нужен только один туннель. для этого plink подходит лучше. Но туннель можно создать и c putty, если очень хочется.
#22 by cube033
Спасибо. Ликбез и правда нужен. Пробую.
#23 by cube033
Параметры запуска Plink.exe  плохо гуглятся, можете подсказать или дать ссылку?
#24 by mistеr
Ключевые - те же, что и у putty. Можно все отладить с putty (тут же консоль, удобно смотреть логи мускула), а потом заменить на plink.
#25 by cube033
Спасибо.
#26 by cube033
plink.exe работает точно также, как PuTTY.exe с параметрами. То же самое окно консоли. Та же самая ошибка. Ничего принципиально нового не увидел. А главное - как происходит взаимодействие? По какому принципу? После запуска правильно настроенного ПуТТИ - Моя ОС - слушает обращение к 3306 (или другому указанному) и перенаправляет его на указанный сервер?
#27 by mistеr
Мда, шаг 2 ты конечно пропустил. И в шаге 3 напутал. >То же самое окно консоли. Добавь ключ -N >как происходит взаимодействие? После создания туннеля plink/putty слушает указанный порт на клиенте, и весь трафик пересылает через туннель на указанные хост/порт. В резульате для 1С все выглядит так, как будто MySQL работает на этой же машине, на localhost:3306. Теперь сам догадайся, что нужно вписать в ConString.
#28 by cube033
-N приводит к тому, что открывается то самое окно - просто дальше вывода логина дело не идет. "Шаг 2 пропустил" - если речь идет о -ssh, то -load Sadovod загружает сессию, в которой указано, что SSH подключение по 22 порту к серверу xxxx.ssh.masterhost.ru, а в разделе туннели говорится ,что локальный порт 3306, Назначение uхххххх.mysql.masterhost.ru:3306. Не представляю, что можно дописать в ConString............... ............................................................ Включил мозг и перечитал . Теперь представляю))) Спасибо все заработало!!!!!! ConString = "Driver={MySQL ODBC 3.51 Driver};SERVER=localhost;Port=3306;Database=uхххх_newgard;Uid=uххххх_1c;PWD=ххххххх;";
#29 by cube033
Всё отлично работает - только не могу решить последнюю проблему. Кто сталкивался с plink.exe - подскажите как её запустить в свернутом режиме или вообще без окна) -N не помогает. Окно открывается, авторизация не происходит либо не отображается. Или может у 1С есть параметр - запуск приложения в свернутом состоянии?
#30 by SanGvin
зря подсматриваешь там, г-код, зарисовка так сказать))
#31 by cube033
Спасибо. Тоже нашел этот способ, только у меня: Теперь думаю над Terminate. - не работает. Без скобок тоже не работает.
#32 by Абырвалг
ws вам помогут
#33 by cube033
такой способ обречен, ибо тип переменной "Приложение" - число. В мануалах с терминатором используют открытие через Exec, а не Run. Но Exec - не позволяет запустить в свернутом состоянии. Надо искать дальше.
#34 by cube033
Да блин, что же за напасть?! Уже согласился на Exec, пусть окошко консоли появляется, а потом закрывается. Так ведь Exec не поддерживает запуск с параметрами! Может кто знает лекарство от моей беды?
#35 by SanGvin
эм... а taskkill /im plink.exe потом вызывать религия не позволяет? или это не подходит?
#36 by Ковычки
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 by Ковычки
#38 by Ковычки
#39 by cube033
Спасибо огромное! Не понимаю каким образом это работает, но это работает. У меня это в разных процедурах и покомпактнее. ЗапускТуннеля
#40 by lavrov
Специально для мастер хоста.
#41 by cube033
Подскажите пожалуйста примерчик или толковое описание параметров запуска 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 by mistеr
"Server refused" ни на что не намекает? Сервер не дает тебе шелл. Тебе он и не нужен, поэтому не надо просить. Не просить шелл это ключ -N, я давно про него сказал, а ты проигнорил. >конструкцию ххх@xxx не совсем понимаю. Это есть в любом описании, даже самом бестолковом. Даже если просто запустсть plink, оно сразу выскакивает. Делаю вывод, что ты и не пытался читать.
#43 by cube033
Серьезно, сколько раз я писал про то что пробовал -N и не к чему полезному это не приводило? Про конструкцию ххх@xxx действительно есть в каждом описании (которых я прочитал больше 10) как "параметры подключения". Вопрос в том что мне нужно подключиться к SSH серверу для тоннеля и mysql серверу для обращения к базе, поэтому и не понимаю какой сервер указывать именно в этой конструкции. Немного запутал , так как там Дважды указывается "Хост" как одна переменная. Копания в интерфейсе Путти привели меня к выводу что для -L указывается mysql хост, а для конструкции xxx@xxx - ssh хост. Про "Server refused" мне намекает, что сервер мне отказал, но не намекает на причину. Ошибка возникает даже при подключении из интерфейса Путти, такого раньше не было. А все дело в том что сервер загружен, так как в данный момент выполняется моя обработка,которая выбгружает все изображения из базы (базе 6 лет) на FTP, делая preview и записывая инфу в БД сайта. Рассчетное время выполнение обработки - 25 часов.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С