- Home »

Перенаправление портов SSH: как настроить и использовать
В этой статье разберёмся, что такое перенаправление портов SSH (SSH port forwarding), зачем оно вообще нужно и как его быстро и без боли настроить. Если ты когда-нибудь сталкивался с задачей пробросить порт через туннель, обойти фаервол, подключиться к базе данных на удалённом сервере или просто хочешь сделать свою инфраструктуру чуть более гибкой и безопасной — добро пожаловать. Будет много практики, примеры из жизни, схемы, команды и даже немного магии. Всё, чтобы ты мог не только понять, но и сразу внедрить SSH port forwarding в свои проекты или на работе.
Как это работает? Простыми словами, но по-взрослому
SSH — это не только про безопасный доступ к серверу по консоли. Это ещё и про туннели, которые позволяют прокидывать трафик через защищённое соединение. Перенаправление портов (port forwarding) — это способ «протянуть» нужный тебе порт (или даже несколько) через SSH-сессию, чтобы получить доступ к сервисам, которые обычно недоступны извне. Например, к базе данных, веб-интерфейсу админки, внутреннему API или даже к рабочему столу через RDP.
Есть три основных типа SSH port forwarding:
- Локальное перенаправление (Local Forwarding) — ты открываешь порт на своей машине, а трафик уходит через SSH на удалённый сервер и дальше к целевому сервису.
- Удалённое перенаправление (Remote Forwarding) — наоборот: открываешь порт на удалённом сервере, а трафик уходит к тебе или куда скажешь.
- Динамическое перенаправление (Dynamic Forwarding, SOCKS proxy) — превращаешь SSH в прокси-сервер (SOCKS5), и можешь гнать через него любой трафик, как через VPN.
Всё это работает благодаря тому, что SSH умеет не только шифровать трафик, но и «таскать» через себя любые данные, не только команды терминала.
Как быстро и просто всё настроить?
Давай сразу к делу. Вот базовые команды для каждого типа перенаправления. Все примеры — для Linux/macOS, но на Windows с PuTTY или MobaXterm всё аналогично (там просто кликаешь мышкой).
Локальное перенаправление (Local Forwarding)
Допустим, у тебя есть база данных PostgreSQL на сервере db.example.com
, которая слушает только localhost:5432
(и снаружи не видна). Ты хочешь подключиться к ней со своего ноутбука.
ssh -L 15432:localhost:5432 [email protected]
Теперь на твоём ноуте порт 15432
будет прокинут через SSH на сервер, и там подключится к localhost:5432
. В любой программе (например, pgAdmin) указываешь localhost:15432
— и ты в базе!
Удалённое перенаправление (Remote Forwarding)
Допустим, у тебя на локальной машине крутится веб-сервер на порту 8000, а ты хочешь, чтобы его увидели на сервере (например, для теста или демо).
ssh -R 18000:localhost:8000 [email protected]
Теперь на сервере remote-server.com
порт 18000
будет прокинут к тебе на localhost:8000
. Любой, кто на сервере откроет localhost:18000
, попадёт на твой локальный веб-сервер.
Динамическое перенаправление (SOCKS proxy)
А вот если хочется, чтобы весь браузерный трафик (или любой другой) шёл через сервер (например, чтобы обойти блокировки или посмотреть, как сайт выглядит из другой страны):
ssh -D 1080 [email protected]
Теперь у тебя на локальной машине поднялся SOCKS5-прокси на порту 1080. В браузере прописываешь настройки прокси — и весь трафик идёт через сервер.
Примеры, схемы, практические советы
Давай разберём несколько реальных кейсов, где SSH port forwarding реально спасает.
Кейс | Тип перенаправления | Плюсы | Минусы | Рекомендации |
---|---|---|---|---|
Доступ к внутренней базе данных (MySQL, PostgreSQL) | Локальное | Безопасно, не надо открывать порт наружу, быстро | Нужно держать SSH-сессию открытой | Используй autossh для автоподключения |
Демо локального сайта заказчику | Удалённое | Не надо деплоить, быстро показать результат | Открываешь доступ наружу, если не ограничить bind | Ограничивай bind на 127.0.0.1, используй пароль/ключи |
Обход блокировок, тестирование гео-локации | Динамическое (SOCKS) | Весь трафик через сервер, гибко | Не все приложения поддерживают SOCKS, возможны лаги | Используй Proxifier или Privoxy для проксирования всего трафика |
Доступ к внутреннему API между серверами | Локальное/Удалённое | Безопасно, не надо VPN, быстро | Не масштабируется на много серверов | Для сложных схем смотри в сторону WireGuard или OpenVPN |
Положительные примеры
- Разработчик подключается к staging-базе через SSH-туннель — база не светится наружу, безопасность +1.
- Админ быстро показывает демо сайта заказчику, не выкладывая его в интернет — SSH-туннель рулит.
- Тестировщик гоняет браузер через сервер в другой стране — смотрит, как сайт работает для зарубежных пользователей.
Отрицательные примеры
- Открыли удалённый порт на 0.0.0.0 — теперь любой может подключиться к вашему локальному сервису. Не делай так!
- Забыли закрыть туннель — кто-то случайно получил доступ к внутренней базе.
- Использовали динамический прокси для всего трафика, а потом удивились, что половина приложений не работает — не все умеют в SOCKS.
Команды и утилиты для автоматизации
Вот набор must-have команд и тулзов для работы с SSH port forwarding:
- ssh — стандартный клиент, всё умеет из коробки.
- autossh — автоматически восстанавливает туннель, если соединение упало. Официальный сайт.
- sshuttle — гибрид VPN и SSH-туннеля, прокидывает весь трафик через SSH. GitHub.
- ProxyCommand и ProxyJump — для сложных схем с несколькими хопами (jump hosts).
- ssh-config — файл
~/.ssh/config
для хранения настроек туннелей и алиасов.
Примеры команд
# Локальное перенаправление
ssh -L 8888:localhost:80 [email protected]
# Удалённое перенаправление
ssh -R 9000:localhost:3000 [email protected]
# Динамическое перенаправление (SOCKS5)
ssh -D 1080 [email protected]
# Использование autossh для автоподнятия туннеля
autossh -M 20000 -L 15432:localhost:5432 [email protected]
# Пример записи в ~/.ssh/config
Host mydb
HostName db.example.com
User user
LocalForward 15432 localhost:5432
Похожие решения и сравнение
SSH port forwarding — это не единственный способ пробросить трафик. Вот краткое сравнение с другими популярными решениями:
Решение | Безопасность | Гибкость | Сложность | Когда использовать |
---|---|---|---|---|
SSH port forwarding | Высокая | Средняя | Низкая | Точка-в-точку, быстро, без VPN |
VPN (WireGuard, OpenVPN) | Высокая | Высокая | Средняя/Высокая | Много серверов, постоянные соединения |
ngrok, localtunnel | Средняя | Высокая | Очень низкая | Быстро показать демо, не для продакшена |
SOCKS/HTTP proxy | Средняя | Средняя | Средняя | Обход блокировок, проксирование браузера |
Интересные факты и нестандартные способы использования
- Через SSH-туннель можно прокидывать не только TCP, но и X11 (графические приложения на удалённом сервере — привет,
ssh -X
). - Можно делать цепочки туннелей через несколько серверов (ProxyJump или ProxyCommand) — например, если у тебя есть только «бастион» (jump host).
- Некоторые используют SSH-туннели для обхода корпоративных фаерволов (но не злоупотребляй — могут уволить).
- SSH-туннель можно поднять в обратную сторону — например, если у тебя дома динамический IP, а надо подключиться извне (reverse tunnel).
- Можно автоматизировать поднятие туннелей через systemd unit или cron — и они всегда будут работать после перезагрузки.
Новые возможности: автоматизация и скрипты
SSH port forwarding отлично ложится в автоматизацию. Например:
- Скрипты для резервного копирования баз данных через туннель (без открытия портов наружу).
- CI/CD пайплайны, которые деплоят на сервер через туннель (без VPN).
- Мониторинг внутренних сервисов через туннель (Prometheus, Grafana, Zabbix).
- Автоматическое поднятие туннелей через systemd или
autossh
— и не надо держать терминал открытым.
Пример systemd unit для автозапуска туннеля:
[Unit]
Description=SSH Tunnel for DB
After=network.target
[Service]
User=youruser
ExecStart=/usr/bin/autossh -M 20000 -N -L 15432:localhost:5432 [email protected]
Restart=always
[Install]
WantedBy=multi-user.target
Выводы и рекомендации
SSH port forwarding — это простой, мощный и безопасный инструмент для доступа к внутренним сервисам, обхода ограничений и автоматизации. Он отлично подходит для быстрого решения задач: подключиться к базе, показать демо, прокинуть API, обойти блокировки. Не требует отдельного VPN, легко автоматизируется, работает из коробки почти везде.
Рекомендации:
- Используй локальное перенаправление для доступа к внутренним сервисам (базы, админки, API).
- Удалённое — для публикации локальных сервисов наружу (демо, тесты).
- Динамическое — для проксирования трафика (обход блокировок, тесты гео-локации).
- Не забывай про безопасность: не открывай порты на 0.0.0.0 без необходимости, используй ключи, ограничивай доступ.
- Для постоянных туннелей используй
autossh
или systemd. - Для сложных схем с множеством серверов — смотри в сторону VPN (WireGuard, OpenVPN).
Если тебе нужен VPS или выделенный сервер для экспериментов с SSH port forwarding — можешь заказать VPS или выделенный сервер прямо здесь на блоге.
SSH port forwarding — это тот самый швейцарский нож для админа и девопса. Освой его — и многие задачи станут проще, быстрее и безопаснее.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.