В одном из проектов по обмену 1с — CMS сайт располагался на хостинге Masterhost. Прямой доступ в базу MySQL они не открывают, но можно поднять SSH тунель и через него есть доступ в базу.
Тунель открываю через putty, запускаю с параметрами его через VBS.
Т.о. доступ к базе на хостинге открыт на адресе localhost:3306
После обмена убиваю putty.
Процедура ПодключитьSSH() ЛогинSSH = ЭтотОбъект.Логин; ПарольSSH = ЭтотОбъект.ПарольSSH; ФайлPutty = Новый Файл(КаталогВременныхФайлов() + "putty.exe"); Если Не ФайлPutty.Существует() Тогда ПолучитьМакет("putty").Записать(ФайлPutty.ПолноеИмя); КонецЕсли; Если ФайлPutty.Существует() Тогда ИмяСкрипта = ПолучитьИмяВременногоФайла("vbs"); Скрипт = Новый ЗаписьТекста(ИмяСкрипта, КодировкаТекста.ANSI); СтрокаВыполнения = "File = """ + ФайлPutty.ПолноеИмя + """ |Set ws = Wscript.CreateObject(""Wscript.Shell"") |CommandString = """""""" &File& """""" -ssh -l " + ЛогинSSH + " -pw " + ПарольSSH + " -L 3306:" + ЛогинSSH + ".mysql.masterhost.ru:3306 " + ЛогинSSH + ".ssh.masterhost.ru "" |'MsgBox (CommandString) |Set FSO=CreateObject(""Scripting.FileSystemObject"") |Set File=FSO.GetFile(WScript.ScriptFullName) |File.Delete |Return = ws.Run(CommandString, 1, TRUE)"; Скрипт.Записать(СтрокаВыполнения); Скрипт.Закрыть(); WshShell = Новый COMОбъект("WScript.Shell"); Попытка WshShell.Run("wscript.exe " + ИмяСкрипта, 0, "False"); Исключение КонецПопытки; Иначе Сообщить("Программма putty не найдена"); КонецЕсли; КонецПроцедуры Процедура ОтключитьSSH() ФайлPutty = Новый Файл(КаталогВременныхФайлов() + "putty.exe"); Если Не ФайлPutty.Существует() Тогда Возврат; КонецЕсли; ИмяСкрипта = ПолучитьИмяВременногоФайла("vbs"); Скрипт = Новый ЗаписьТекста(ИмяСкрипта, КодировкаТекста.ANSI); СтрокаВыполнения = "File = """ + ФайлPutty.Имя + """ |Set ws = Wscript.CreateObject(""Wscript.Shell"") |CommandString = ""taskkill /F /IM """""" &File& """""""" |'MsgBox (CommandString) |Set FSO=CreateObject(""Scripting.FileSystemObject"") |Set File=FSO.GetFile(WScript.ScriptFullName) |File.Delete |Return = ws.Run(CommandString, 1, TRUE)"; Скрипт.Записать(СтрокаВыполнения); Скрипт.Закрыть(); WshShell = Новый COMОбъект("WScript.Shell"); Попытка WshShell.Run("wscript.exe "+ИмяСкрипта, 0, "False"); Исключение КонецПопытки; КонецПроцедуры