Как пробросить порт удаленного сервера на локальную машину через SSH

«Как пробросить порт удаленного сервера на локальную машину через SSH» — вопрос из категории Linux, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для проброса порта удаленного сервера на локальную машину используйте SSH-туннелирование с опцией -L (Local port forwarding).

Базовый синтаксис:

ssh -L [локальный_порт]:[удаленный_хост]:[удаленный_порт] [пользователь]@[ssh_сервер]

Практический пример: Допустим, на удаленном сервере app-server.internal работает веб-приложение на порту 8080, но этот порт закрыт внешним фаерволом. Чтобы получить к нему доступ локально через порт 8888, выполните:

ssh -L 8888:localhost:8080 devops@ssh-gateway.company.com

После установки соединения вы сможете открыть в локальном браузере http://localhost:8888 и получить доступ к удаленному приложению.

Ключевые опции и сценарии использования в DevOps:

  • -L — стандартный локальный проброс (трафик с локальной машины перенаправляется через SSH-сервер к целевому хосту).
  • -R — обратный проброс (Reverse tunneling). Полезен для временного доступа к сервису на вашей локальной машине из удаленной сети (например, для отладки вебхука).
  • -N — не выполнять удаленную команду, только пробросить туннель.
  • -f — перевести процесс в фон.
  • -o ExitOnForwardFailure=yes — завершить сессию при ошибке проброса порта.

Важно для безопасности: SSH-туннелирование часто используется для безопасного доступа к внутренним ресурсам (базам данных, панелям мониторинга, API), которые не должны быть доступны из интернета. В продакшене для постоянного доступа часто настраивают VPN или используют сервисные меши (например, Teleport).