SSH туннели туда и обратно
Сейчас всё чаще встречается ситуация, когда
Что делать, если доступ к БД надо получить с локальной машины, например, для срочной отладки сайта? Нужно использовать туннелирование. Как подсказывает Википедия, Туннелирование — это процесс, в ходе которого создается защищенное логическое соединение между двумя конечными точками посредством инкапсуляции различных протоколов. Мы будем инкапсулировать протокол базы данных внутрь протокола SSH.
Часто в клиентах БД уже есть поддержка
Но некоторые программы не поддерживают туннели, например HeidiSQL, которую я использую для работы с MSSQL. В таком случае нам придётся сделать туннель руками с помощью PuTTY или с помощью самого SSH, если вы работаете в системе где он есть.
На картинке — настройки туннеля для PostgreSQL. Осталось только нажать Add, чтобы добавить настройки туннеля к конфиг, и нажать Open, чтобы запустить соединение. Теперь, чтобы соединиться с базой данных, в клиенте в качестве хоста нужно указать localhost и наш порт.
Ту же самую настройку можно сделать непосредственно в SSH:
ssh -f -N -L 5432:mssqlhost.com:5432 sshuser@site.com
Кючи -f и -N здесь нужны, чтобы отправить
Таким образом нам удалось соединиться с удалённой базой данных, которая находится на хосте mssqlhost.com, через
Интересно, что можно сделать и обратную операцию: перенаправить порт с удалённой машины на наш локальный. Например, мы хотим с удалённого сервера зайти по SSH на виртуальную машину, которая крутится на нашем локальном компьютере, который не имеет внешнего IP. Тогда настройка будет такая:
Здесь я заодно изменил порт. Теперь, чтобы подключиться к виртуальной машине, на удалённом компьютере достаточно набрать
ssh -p443 localhost
То же самое, с помощью самого SSH:
ssh -f -N -R 443:192.168.1.1 :22 sshuser@site.com
В этом случае посредником между виртуальной машиной и удалённым сервером выступает наш собственный компьютер.
Неочевидный факт следует из последнего примера: с помощью туннелирования можно изменять стандартные порты, если они по