SSH давно перестал быть просто способом подключиться к удалённому серверу. В руках администратора он превращается в универсальный инструмент для безопасной доставки сетевого трафика туда, куда обычным пользователям путь закрыт.
Представьте старый паровой завод. Между цехами идут десятки труб, по которым движется пар. Никто не видит содержимое труб, но каждый механизм получает именно то давление, которое ему необходимо. SSH-туннель работает почти так же: вместо пара внутри движется TCP-трафик, а вместо медных труб — зашифрованный канал.
Сегодня SSH-туннели используются буквально везде:
- доступ к внутренним веб-приложениям;
- подключение к MySQL и PostgreSQL без открытия портов наружу;
- безопасный RDP;
- обход сетевых ограничений;
- временная публикация локального сервиса в Интернет;
- SOCKS-прокси для браузера.
Главное преимущество — никаких VPN, дополнительных сервисов и сложной инфраструктуры. Достаточно установленного OpenSSH, который входит практически во все современные Linux-дистрибутивы и доступен в Windows. Поддержка локального (-L), удалённого (-R) и динамического (-D) проброса портов остаётся стандартной возможностью OpenSSH.
Как работает SSH-туннель
Самая распространённая ошибка начинающих администраторов — думать, что SSH-туннель каким-то образом “открывает порт”.
На самом деле происходит совсем другое. После подключения по SSH создаётся защищённый канал. Внутри этого канала начинают передаваться обычные TCP-пакеты. Получается примерно такая схема.

SSH Tunnel (AES Encryption)Никакой магии. SSH просто принимает соединение на одном конце трубы и аккуратно выпускает его на другом.
Какие бывают SSH-туннели
Практически вся работа сводится к трём режимам.
| Режим | Ключ | Назначение |
|---|---|---|
| Local Forwarding | -L | открыть удалённый сервис локально |
| Remote Forwarding | -R | открыть локальный сервис удалённо |
| Dynamic Forwarding | -D | SOCKS-прокси |
На практике около 90% задач решаются именно этими тремя режимами.
Local Port Forwarding (-L)
Это самый популярный сценарий.
Допустим, имеется сервер базы данных:
10.10.50.15:5432Он доступен только внутри корпоративной сети.
Но есть SSH-сервер:
gateway.company.localчерез который можно войти.
Тогда команда выглядит так:
ssh -L 5432:10.10.50.15:5432 admin@gateway.company.localПосле подключения можно открыть локальный клиент PostgreSQL:
psql -h localhostи работать так, словно база находится на вашем компьютере.
SSH самостоятельно доставит весь трафик через защищённый канал.
Разбираем команду по винтикам
sshЗапускает SSH-клиент.
-LСоздаёт локальный туннель.
5432Порт, который открывается у вас на компьютере.
10.10.50.15Хост назначения.
5432Порт удалённой базы.
admin@gateway.company.localSSH-сервер, через который строится тоннель.
Практический пример
Есть внутренний Jenkins.
192.168.10.25:8080Доступен только внутри сети.
Выполняем:
ssh -L 8080:192.168.10.25:8080 admin@vpn.company.ruТеперь браузер открывает
http://localhost:8080и вы работаете с Jenkins так, будто сидите прямо в офисе. Никаких опубликованных портов. Никакого VPN.
Полезные параметры
Очень часто туннель нужен без открытия консоли.
Используйте:
ssh -N -L 8080:192.168.10.25:8080 admin@serverОпция
-Nговорит SSH: “терминал не нужен, только туннель.”.
Если хочется сразу отправить процесс в фон:
ssh -f -N -L 8080:192.168.10.25:8080 admin@serverТеперь SSH продолжит работать как демон. Такие режимы предусмотрены OpenSSH и широко используются для постоянных туннелей.

Remote Port Forwarding (-R)
Если Local Forwarding позволяет попасть внутрь удалённой сети, то Remote Forwarding работает наоборот. Он публикует локальный сервис на удалённом сервере.
Это очень полезно, если:
- компьютер находится за NAT;
- провайдер не даёт белый IP;
- необходимо временно показать коллегам локальное веб-приложение;
- нужно организовать обратный доступ к сервису.
Например, локально запущен веб-сервер:
localhost:3000Выполняем:
ssh -R 8080:localhost:3000 admin@public-serverТеперь пользователи, подключившиеся к удалённому серверу на порт 8080, смогут работать с вашим локальным приложением. По умолчанию удалённый порт обычно слушает только loopback, а для публикации на всех интерфейсах может потребоваться настройка GatewayPorts на сервере.
Где это реально используется
За годы администрирования чаще всего приходилось использовать Remote Forwarding в таких ситуациях:
- демонстрация локального сайта заказчику;
- временный доступ к веб-интерфейсу оборудования;
- удалённая диагностика сервисов;
- проброс RDP через Linux-хост;
- обслуживание IoT-устройств за NAT.
Практически всегда это оказывается быстрее и безопаснее, чем временно открывать порты на маршрутизаторе.
Dynamic Port Forwarding (-D): превращаем SSH в SOCKS5-прокси
Если локальный (-L) и удалённый (-R) проброс портов напоминают медные трубы, соединяющие две конкретные машины, то режим -D — это уже настоящий распределительный коллектор. Через него можно направлять практически любой TCP-трафик.
Вместо проброса одного порта OpenSSH запускает локальный SOCKS5-прокси, а приложения сами решают, какие соединения отправлять через него. Такой режим поддерживается OpenSSH уже много лет и остаётся стандартным способом организации динамического туннеля.
Например:
ssh -D 1080 -N user@server.example.comПосле выполнения команды на локальном компьютере появится SOCKS5-прокси:
127.0.0.1:1080Теперь достаточно указать этот прокси в браузере, VS Code, IDE или другом приложении, поддерживающем SOCKS5.
Где используется Dynamic Forwarding
На практике этот режим регулярно применяется в следующих сценариях:
- безопасный доступ к внутренним веб-приложениям;
- работа с административными панелями;
- подключение IDE к внутренним API;
- тестирование сервисов из другой сети;
- безопасная работа через публичный Wi-Fi.
Важно понимать одну особенность: SSH не является полноценной заменой VPN. Через SOCKS-прокси пойдёт только трафик тех приложений, которые вы явно настроите на его использование.
Используем ~/.ssh/config
После десятка SSH-команд терминал начинает напоминать свиток древнего инженера. Постоянно вводить длинные параметры неудобно, поэтому OpenSSH позволяет хранить настройки в конфигурационном файле клиента.
Например:
Host prod-db
HostName 192.168.20.15
User admin
Port 22
IdentityFile ~/.ssh/id_ed25519Теперь подключение выглядит максимально просто:
ssh prod-dbЕсли требуется создать туннель автоматически:
Host jenkins
HostName bastion.company.local
User admin
LocalForward 8080 192.168.100.25:8080После этого достаточно выполнить:
ssh jenkinsТуннель создастся автоматически.
ProxyJump — современная альтернатива длинным цепочкам SSH
Во многих компаниях серверы находятся во внутренней сети и недоступны напрямую. Для доступа используется bastion host (jump server).
Раньше приходилось применять громоздкие конструкции через ProxyCommand.
Сегодня используется гораздо более удобная возможность OpenSSH — ProxyJump (или ключ -J). Она позволяет автоматически строить цепочку подключений через один или несколько промежуточных серверов.
Простейший пример:
ssh -J bastion.company.local db01.internalИли через конфигурационный файл:
Host bastion
HostName bastion.company.local
User admin
Host db01
HostName 10.20.30.15
User postgres
ProxyJump bastionТеперь достаточно выполнить:
ssh db01OpenSSH самостоятельно подключится к bastion, а затем перенаправит соединение на внутренний сервер.

SSH-туннели в Windows
Начиная с современных версий Windows 10 и Windows 11, OpenSSH Client можно установить как дополнительный компонент или использовать уже предустановленную версию в новых сборках.
Проверка выполняется одной командой:
ssh -VСоздание туннеля ничем не отличается от Linux:
ssh -L 3306:10.10.10.20:3306 admin@serverИли:
ssh -D 1080 admin@serverБлагодаря этому не требуется использовать сторонние программы вроде PuTTY, если достаточно возможностей OpenSSH.
Автоматическое восстановление соединения с помощью AutoSSH
SSH-соединения иногда обрываются:
- нестабильный Интернет;
- перезагрузка маршрутизатора;
- смена сети;
- временная потеря связи.
Если туннель должен работать постоянно, удобно использовать autossh.
Установка в Debian/Ubuntu:
sudo apt install autosshЗапуск:
autossh -M 0 -f -N \
-L 5432:10.10.50.15:5432 \
admin@serverВ отличие от обычного ssh, утилита автоматически восстановит соединение после разрыва.
Типичные ошибки
Connection refused
Причины:
- сервис не запущен;
- указан неправильный порт;
- firewall блокирует соединение.
Проверяем:
ss -tlnили
sudo lsof -iAddress already in use
Локальный порт уже используется.
Проверяем:
ss -tlnpили меняем порт:
ssh -L 8081:...Permission denied (publickey)
Наиболее распространённая причина — неправильный ключ.
Проверяем:
ssh -i ~/.ssh/id_ed25519 serverили включаем подробный вывод:
ssh -vvv serverОпция -vvv выводит детальную информацию о процессе подключения и значительно упрощает диагностику проблем.
Практические рекомендации
За годы эксплуатации SSH-туннелей сформировался небольшой набор правил, который помогает избежать большинства проблем.
- Не публикуйте базы данных напрямую в Интернет — используйте SSH-туннели.
- Применяйте
ProxyJumpвместо сложных цепочекProxyCommand. - Для постоянных соединений используйте
autosshили systemd. - Всегда работайте по ключевой аутентификации.
- Ограничивайте удалённый проброс (
-R) настройками сервера и внимательно относитесь к параметруGatewayPorts, если требуется доступ извне.
Заключение
SSH-туннелирование остаётся одним из самых универсальных инструментов системного администратора. С его помощью можно безопасно подключаться к внутренним сервисам, организовывать временный доступ к приложениям, строить цепочки через bastion-хосты и создавать защищённые каналы без развёртывания полноценного VPN.
Главное — понимать, какой режим подходит под конкретную задачу:
-L— получить доступ к удалённому сервису с локальной машины.-R— предоставить удалённый доступ к локальному приложению.-D— поднять SOCKS5-прокси для гибкой маршрутизации трафика.ProxyJump— упростить работу с серверами, расположенными за bastion-хостом.
Когда эти инструменты освоены, SSH превращается не просто в средство удалённого входа, а в универсальный механизм управления сетевыми соединениями — надёжный, предсказуемый и проверенный временем.
⚙️ Машинное отделение ROADIT благодарит за прочтение.
Больше команд, шпаргалок и обзоров — на roadit.ru и в нашем Телеграф-канале.
📋 Все команды