SSH туннели туда и обратно

15.05.2014
@LEXXX_NF

Сейчас всё чаще встречается ситуация, когда веб-сайт работает с базой данных, которая установлена на отдельном выделенном сервере. В целях безопасности доступ к серверу БД разрешается только с IP адреса веб-сервера. Схематично это выглядит так:

Browser Site Database

Что делать, если доступ к БД надо получить с локальной машины, например, для срочной отладки сайта? Нужно использовать туннелирование. Как подсказывает Википедия, Туннелирование — это процесс, в ходе которого создается защищенное логическое соединение между двумя конечными точками посредством инкапсуляции различных протоколов. Мы будем инкапсулировать протокол базы данных внутрь протокола SSH.

Часто в клиентах БД уже есть поддержка SSH-туннелирования, например как в Valentina Studio, которую я использую для работы с PostgreSQL.

SSH туннель в Valentina Studio

Но некоторые программы не поддерживают туннели, например HeidiSQL, которую я использую для работы с MSSQL. В таком случае нам придётся сделать туннель руками с помощью PuTTY или с помощью самого SSH, если вы работаете в системе где он есть.

PuTTY SSH туннель для PostgreSQL в PuTTY

На картинке — настройки туннеля для PostgreSQL. Осталось только нажать Add, чтобы добавить настройки туннеля к конфиг, и нажать Open, чтобы запустить соединение. Теперь, чтобы соединиться с базой данных, в клиенте в качестве хоста нужно указать localhost и наш порт.

Valentina Studio

Ту же самую настройку можно сделать непосредственно в SSH:

ssh -f -N -L 5432:mssqlhost.com:5432 sshuser@site.com

Кючи -f и -N здесь нужны, чтобы отправить SHH-соединение в фон.

Таким образом нам удалось соединиться с удалённой базой данных, которая находится на хосте mssqlhost.com, через хост-посредник site.com.

Интересно, что можно сделать и обратную операцию: перенаправить порт с удалённой машины на наш локальный. Например, мы хотим с удалённого сервера зайти по SSH на виртуальную машину, которая крутится на нашем локальном компьютере, который не имеет внешнего IP. Тогда настройка будет такая:

Valentina Studio

Здесь я заодно изменил порт. Теперь, чтобы подключиться к виртуальной машине, на удалённом компьютере достаточно набрать

ssh -p443 localhost

То же самое, с помощью самого SSH:

ssh -f -N -R 443:192.168.1.1:22 sshuser@site.com

В этом случае посредником между виртуальной машиной и удалённым сервером выступает наш собственный компьютер.

Неочевидный факт следует из последнего примера: с помощью туннелирования можно изменять стандартные порты, если они по каким-то причинам закрыты файерволом.

Комментов нет совсем... почему-то...

Писáть здесь