SSH tunnel в Linux — как создать SSH туннель для проброса порта


SSH tunnel в Linux — настроенный на сервере канал для передачи, создаваемый между двумя машинами, находящимися в сети.

Часто применяется для подключения к localhost извне.



SSH tunnel в Linux и проброс порта


Рассмотрим пример использования ssh туннелей — в частности проброс порта с одного сервера на другой.



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

Такое подключение в Linux можно организовать с использованием ssh tunnel.

Порт пробрасывается с одного сервера на другой. Подключение выполняется локально и выглядит для системы как подключение к локальной службе. Фактически при этом становится возможна работа с удаленным сервером.

Подключение к сервису на удаленной машине идёт в зашифрованном виде поверх ssh и в рамках ssh сессии.


Пример настройки ssh туннеля для подключения к серверу баз данных



Имеет два сервера с Linux со следующими hostname:

  • server — локальный сервер, с него будем выполнять подключение к сервису на centos7 через туннель
  • centos7 — сервер с работающем на нём MySQL (MariaDB), условный ip адрес 123.123.123.123


Настраиваем авторизацию по ssh ключу при подключении с первого сервера на второй.


На машине server в screen создаём SSH туннель выполнением в консоли сервера следующей команды

ssh -L 9999:127.0.0.1:3306 [email protected]



Выходим из screen. Команда открывает SSH соединение. Флаг -L указывает, что приведенный порт на локальном клиенте должен пробрасываться на порт и адрес удаленного сервера.

Это означает, что на порту 9999 на локальной машине появится процесс, через ssh сессию по этому порту можно будет подключиться к сервису на порту 3306 на машине centos7.



Просматирваем список запущенных сервисов через netstat. Среди них нет севера баз данных (это позволяет исключить ошибки, в реальном окружении он может быть, главное чтобы использовались свободные порты). Порт можно изменить на любой свободный, избегая стандартных.

Указывая порт 9999 подключаемся к серверу баз данных на удалённой машине:

ssh tunnel в linux



Переходим на машину centos7. Проверяем на ней версию сервера баз данных (ожидаем MariaDB5.5, в которую попали с server)

Также просматриваем список запущенных сервисов:

ssh tunnel для сервера баз данных


На машине centos7 не появилось никаких дополнительных процессов. Сервер баз данных запущен на стандартном порту 3306.

Примечательно, что в базу данных через ssh tunnel на другом Linux сервере удалось попасть без пароля.



Если использовать туннель нужно постоянно, то стоит предусмотреть более надежный способ запуска процесса, чем screen. Можно использовать systemd или запускать процесс вместе с поднятием сети на сервере.



Читайте про sshfs — файловую систему, позволяющую монтировать раздел на удаленной машине по ssh

Сказать спасибо