Строим SSH-туннели для доступа к MySQL

Всем привет!
Хоть и звучит страшно и непонятно название заметки, на самом деле все очень просто. Часто у программистов компании возникает необходимость подключиться к MySQL серверу, чтобы поколдовать с базой данных. Если база лежит на хостинге, то народ пользуется либо старым добрым (а добрым ли?) PHPMyAdmin, либо, консолью. Но многим очень нравится использовать, к примеру DBForge Studio для работы с локальным сервером БД, к которому можно подключится напрямую. Хочу всем любителям графических клиентов показать способ, который позволит подключаться к MySQL на любом unix-сервере, для которого у вас есть реквизиты доступа по SSH.

Называется этот способ — SSH-туннель. Если наше клиентское приложение работает с одним определённым сервером и портом по TCP-протоколу, можно настроить SSH-клиент таким образом, чтобы он пропускал через SSH-туннель TCP-соединения, приходящие на определённый TCP-порт машины, на которой запущен SSH-клиент. Не совсем понятно? Для установления соединения с сервером БД клиент использует протокол TCP и определенный порт подключения, в данном случае, номер порта 3306. Если мы запустим на нашей локальной машине сервис, который будет «слушать» локальный порт 3306 (или любой другой), получать оттуда данные, шифровать и заворачивать пакеты в туннель до порта 3306 удаленного сервера, на котором запущен MySQL (и получать данные таким же образом — обратно), то мы сможем работать с этим сервером так, словно бы мы подключились к локальному ресурсу.

Проброс MySQL соединения через SSH-туннель

Проброс MySQL соединения через SSH-туннель

Туннелировать соединения умеет всем известный SSH-клиент PuTTY, делается это таким образом: Создаем в PuTTY соединение с нужным нам сервером, указываем его IP-адрес, присваиваем понятное нам имя сессии и переходим в раздел Connection-SSH-Tunnels. Там в поле Source Port (исходящий порт) вводим 3306, а в поле Destination (порт назначения), указываем 127.0.0.1:3306 (Если хотите, вы можете здесь указать другой номер порта, лучше всего из диапазона 1024-65535, так как эти порты обычно всегда свободны, а порт 3306 может быть занят вашим локальным MySQL-сервером, к которому вы при активном туннеле подключиться уже не сможете!) и жмем Add (добавить). Затем переходим в раздел Session, жмем Save, сохраняем сессию, а теперь Open. В появившемся окне вводим SSH-логин и пароль к нему для доступа к серверу. Теперь, если все прошло успешно, у вас должна быть установлена SSH-сессия с туннелем, соединившим удаленный порт 3306 с вашим локальным портом 3306 (либо другим, какой вы указали в поле Destination). Настало время открыть свое любимое приложение-клиент для работы с базой данных и создать подключение к адресу 127.0.0.1:3306 (либо другим портом, какой вы указали в поле Destination). Жмем кнопку Подключиться — и, вот она, удаленная база, делайте с ней что хотите, но если вдруг захочется сотворить DROP DATABASE, то прежде спросите у сисадмина, а есть ли к ней свежий бекап? 😉

3 комментария to “Строим SSH-туннели для доступа к MySQL”

  1. vkontakte.ru Елена Хохолева:

    Полезно и доступно, спасибо!

    Вот только совсем ты меня лишаешь поводов позвать лишний раз админа к себе. 😉

  2. Елена Гранева:

    Отличная статья! Возьмем на вооружение!
    Спасибо, Леонид 🙂

  3. Владимир:

    Все еще проще DBForge Studio при создании подключения в настройках есть подключаться через SSH вводим данные и пользуемся.

Коментарии