Автоматический тунель до MySQL базы MasterHost

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

КонецПроцедуры

Добавить комментарий