SSH позволяет не только подключаться к удалённым серверам и выполнять команды. Через него можно создавать защищённые туннели и получать доступ к сервисам, которые недоступны извне. Например, PostgreSQL работает только внутри сервера и доступен только локально:
127.0.0.1:5432
Порт базы данных не открыт наружу, но есть SSH-доступ к серверу. Создаём локальный туннель, который принимает соединения на вашем компьютере и передаёт их через SSH:
ssh -L 5433:localhost:5432 user@server
Теперь приложение на локальном компьютере подключается к базе через созданный порт:
psql -h 127.0.0.1 -p 5433 database
При этом PostgreSQL остаётся закрытым для внешнего мира. Доступ к нему появляется только через SSH-туннель.
Тот же подход работает с любыми TCP-сервисами. Например, можно получить доступ к внутренней панели администратора, которая слушает только на сервере:
ssh -L 8080:localhost:8080 user@server
После создания туннеля сервис доступен локально:
http://localhost:8080
Обратный туннель используется, когда удалённому серверу нужен доступ к сервису, который работает на вашей локальной машине. Например, приложение для разработки запущено на порту 3000:
ssh -R 9000:localhost:3000 user@server
Теперь процесс на сервере может обращаться к вашему локальному приложению через:
localhost:9000
Это часто используют для тестирования вебхуков, демонстрации окружений разработки и временного доступа к локальным сервисам.
Если требуется открыть reverse tunnel не только для localhost, нужно изменить настройки SSH-сервера:
GatewayPorts clientspecified
AllowTcpForwarding yes
SSH также может работать как SOCKS5-прокси и направлять поддерживающие приложения через удалённую машину:
ssh -N -D 1080 user@server
После этого в приложении можно указать SOCKS5-прокси:
localhost:1080
Такой вариант используется для диагностики маршрутизации и проверки доступа к ресурсам из другой сети.
Если туннель используется постоянно, его можно запустить в фоне без открытия интерактивного сеанса:
ssh -fNT -L 5433:localhost:5432 user@server
Параметры команды:
-f запуск SSH-процесса в фоне
-N не выполнять команды на удалённой машине
-T отключить создание псевдотерминала
Проверить, что локальный порт слушается:
ss -tlnp | grep 5433
Или посмотреть процесс, который использует порт:
lsof -i :5433
Чтобы не писать длинные команды каждый раз, туннели можно описать в стандартном конфигурационном файле SSH:
Host production-db
HostName server.example.com
User deploy
LocalForward 5433 localhost:5432
После этого подключение выполняется короткой командой:
ssh production-db
SSH-туннели не заменяют полноценный VPN, так как работают с конкретными портами и TCP-соединениями. Но для точечного доступа к закрытым сервисам это один из самых быстрых и надёжных инструментов.
🔥 В DevOps они постоянно используются для работы с приватными базами данных, диагностики продакшн окружений, тестирования интеграций и временного доступа без изменения сетевой инфраструктуры.
🚪 Linux Ready | #практика