В одном из проектов по обмену 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");
Исключение
КонецПопытки;
КонецПроцедуры
