Хостинг SpaceWeb
Серверы Дизайн Сайты Безопасность Домены PHP Кейсы клиентов

SSH-туннели: что это и как использовать

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

Решить эту задачу помогают SSH‑туннели. В этой статье мы подробно разберем принцип их работы и изучим, как их эффективно использовать в повседневной практике.

Что такое SSH-туннель и как устроен

SSH-туннель – это защищенный канал связи между двумя устройствами через незащищенную сеть (например, интернет).

Он работает на базе протокола SSH (Secure Shell – «безопасная оболочка»), который обеспечивает три ключевых функции:

Технически SSH-туннель реализует проброс портов (SSH Port Forwarding): данные с определенного порта одного устройства перенаправляются на порт другого через зашифрованное соединение. При этом туннель работает только с TCP-пакетами – другие типы трафика передать нельзя.

Важно понимать, что SSH-туннель не обеспечивает анонимность в сети. Он защищает лишь канал между указанными устройствами: реальный IP-адрес клиента может быть виден на конечном сервере.

По сравнению с VPN SSH-туннель более узкоспециализирован. VPN шифрует весь трафик устройства и чаще используется для анонимного серфинга или обхода гео-блокировок. SSH-туннель требует указания конкретных портов и подходит для точечных задач: удаленного управления серверами, доступа к закрытым сервисам (например, внутренним базам данных), обхода сетевых ограничений или безопасной передачи файлов.

Как использовать SSH-туннель

Когда использовать SSH-туннели

Он пригодится, если нужно:

Типы проброса портов в SSH и как с ними работать

В SSH есть три вида проброса портов:

Локальный проброс портов

Используется, когда нужно получить доступ к удаленному сервису через локальный порт на своем компьютере. SSH-клиент открывает порт на локальной машине и перенаправляет весь трафик через зашифрованное соединение на удаленный сервер, а уже оттуда – к нужному сервису.

Этот вариант часто применяют для безопасного подключения к базам данных, веб-интерфейсам или внутренним сервисам, которые недоступны напрямую из внешней сети.

Пример:

ssh -L 8080:localhost:80 user@example-host

Теперь к сервису на сервере (работающему на порту 80) можно подключиться через локальный адрес http://localhost:8080. Все данные будут передаваться по защищенному SSH‑туннелю.

Удаленный проброс портов

Работает в обратную сторону. В этом случае порт открывается на удаленном сервере, а все подключения к нему перенаправляются через SSH-туннель на локальную машину или другой указанный хост.

Его используют, когда нужно предоставить доступ к локальному сервису из внешней сети без настройки NAT, проброса портов на роутере или изменения сетевой инфраструктуры.

Пример:

ssh -R 9000:localhost:3000 user@example-host

В этом случае сервер выступает посредником: он принимает подключения на порту 9000 и передает их вашему локальному сервису на порту 3000.

Динамический проброс портов

Создает SOCKS-прокси на локальной машине. В отличие от статических туннелей, здесь не указывается конкретный адрес назначения – SSH-клиент сам определяет, куда направлять трафик, на основе запросов приложений.

Этот тип подходит для работы с несколькими сервисами одновременно и часто используется для доступа к ресурсам в закрытых сетях или при необходимости маршрутизировать трафик различных приложений через один зашифрованный канал.

Пример:

ssh -D 1080 user@example-host

В результате на вашем компьютере появится SOCKS‑прокси, который работает на порту 1080. Вы можете прописать этот прокси в настройках браузера, клиента базы данных или любого другого приложения, которое поддерживает работу через прокси.

Как создать SSH-туннели

Чтобы соединение было безопасным и удобным, используют ключи: публичный ключ хранится на сервере, приватный – на вашем компьютере. Сервер проверяет, что ключи совпадают, и пускает вас без пароля.

Linux / macOS

На Linux и macOS все делается через терминал. Сначала создайте пару ключей:

ssh-keygen -t rsa

Система предложит место для сохранения ключа. Если ничего не менять, файлы появятся в папке ~/.ssh. Затем можно задать пароль для приватного ключа. Это дополнительная защита на случай, если к компьютеру получит доступ кто-то еще. Если пароль не нужен, шаг можно пропустить.

Дальше нужно передать публичный ключ на сервер. Проще всего сделать это автоматически:

ssh-copy-id user@example-host

Где user – имя пользователя на сервере, example-host – его адрес.

Команда сама добавит ключ в нужный файл. Если по какой-то причине она недоступна, публичный ключ можно скопировать вручную:

cat ~/.ssh/id_rsa.pub

Скопированный текст появится в файле authorized_keys на сервере.

После этого можно будет подключаться по SSH следующим образом:

ssh user@example-host

Пароль вводить не придется – SSH просто проверит ключи и установит соединение. При первом подключении система спросит, доверяете ли вы серверу. Это стандартное предупреждение, его достаточно подтвердить один раз.

Теперь можно использовать SSH для создания туннелей. Чтобы SSH не открывал удаленную консоль и работал только как защищенный канал, используется параметр -N. Пример локального проброса порта:

ssh -N -L 8080:localhost:80 user@example-host

В этом случае локальный порт 8080 будет связан с портом 80 на сервере, а все данные между ними пойдут через зашифрованное соединение.

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

Windows

В Windows есть два основных способа работать с SSH: через встроенный терминал PowerShell и с помощью набора утилит PuTTY. Оба варианта подходят для создания SSH-туннелей, выбор зависит от того, привычнее ли вам консоль или графический интерфейс.

Через PowerShell процесс почти не отличается от Linux и macOS. Откройте PowerShell и сгенерируйте пару ключей:

ssh-keygen -t rsa

Дальше система предложит выбрать место для сохранения ключа и задать пароль для приватной части. Если ничего не менять, файлы будут сохранены в каталоге ~/.ssh: приватный ключ – id_rsa, публичный – id_rsa.pub.

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

cat ~/.ssh/id_rsa.pub

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

ssh user@IP

Вместо IP указывается IP-адрес или домен сервера. Если приватный ключ не защищен паролем, дополнительный ввод данных не потребуется. При первом подключении Windows предупредит о новом хосте – достаточно подтвердить доверие.

Еще один вариант – использовать PuTTY и PuTTYgen. Эти инструменты устанавливаются вместе и подходят тем, кто предпочитает графический интерфейс.

В PuTTYgen:

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

Для подключения к серверу используется программа PuTTY. В поле Host Name укажите адрес сервера и нажмите Open. Если настроена авторизация по ключу, соединение установится без ввода пароля пользователя.

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

Безопасны ли SSH-туннели

Да, но с некоторыми оговорками. Весь трафик внутри туннеля шифруется так, что перехватить и прочитать данные практически невозможно. Для этого применяются современные криптографические алгоритмы с длинными ключами (например, AES с 128‑ или 256‑битным ключом), перебор которых занимает нереально много времени. Это значит, что даже если кто‑то перехватит данные, прочитать их без ключа практически невозможно. Шифрование работает в обе стороны – и при отправке, и при получении информации.

Однако на практике безопасность SSH-туннеля напрямую зависит от того, насколько корректно настроено само SSH-подключение:

При этом важно понимать, что SSH‑туннель не заменяет комплексные меры безопасности. Он не защищает устройства от вредоносного программного обеспечения – если на вашем компьютере или сервере уже есть вирусы, туннель никак не помешает им работать. Кроме того, он не анализирует и не фильтрует передаваемые данные: шифрует трафик, но не проверяет, безопасны ли файлы или команды, которые вы отправляете. Также SSH‑туннель никак не предотвращает утечки информации, связанные с небрежным хранением ключей – если закрытый ключ попадет в чужие руки, вся защита теряет смысл.

Иными словами, туннель гарантирует конфиденциальность передачи данных, но не решает вопросы безопасности на уровне приложений или устройств.

Практические сценарии использования

SSH‑туннели помогают решать многие практические задачи. Расскажем, для чего их могут создавать:

Доступ к закрытым сервисам на сервере

В некоторых случаях нужно подключиться к сервису на сервере – например, к базе данных или админ‑панели, – но он доступен только изнутри сети. Открывать его в интернет опасно: так злоумышленники могут получить доступ.

Выход – использовать SSH‑туннель. Через него вы получите доступ к нужному сервису, при этом сам сервис останется невидимым для посторонних:

ssh -N -L 8081:127.0.0.1:8080 user@example-host

Удаленный сервис на порту 80 откроется локально по адресу localhost:8081, при этом сам сервер останется закрытым для внешних подключений.

Публикация локального сервиса во внешнюю сеть

Бывает нужно показать кому‑то ваш локальный сервис – например, тестовый сайт или API, – но он доступен только на вашем компьютере. Сторонний человек не может к нему подключиться, потому что сервис не виден за пределами вашей сети.

В такой ситуации помогает удаленный проброс портов. Сервер принимает подключения и передает их через SSH-туннель на локальную машину:

ssh -N -R 5000:127.0.0.1:3001 user@example-host

Теперь любой запрос к порту 5000 на сервере будет перенаправлен на локальный сервис, который работает на порту 3001.

Выполнение команд на удаленной машине

С помощью SSH можно выполнять команды на удаленном сервере прямо из своего терминала – без полноценного входа в систему.

Например, вам нужно узнать, какие процессы сейчас запущены на сервере. Не надо подключаться и разбираться – достаточно одной команды:

ssh user@example-host "ps aux"

Команда выполняется на сервере, а результат сразу обрабатывается на локальной машине.

Резервное копирование и синхронизация данных

SSH часто используют для передачи файлов и бэкапов. Данные можно передавать напрямую между серверами или на локальный компьютер без промежуточных файлов:

tar -cjf - /var/www | ssh example-host "tar -xjf - -C /data/backups"

Для регулярных задач удобнее использовать rsync, который передает только изменившиеся файлы и экономит время и трафик:

rsync -az /home/dev/project example-host:/srv/archive/

Запуск графических приложений с сервера

Через SSH можно не только выполнять команды в терминале или передавать файлы – иногда нужно запустить на сервере программу с графическим интерфейсом и работать с ней прямо на своем компьютере. При этом сама программа выполняется на сервере, а на вашем экране лишь отображается ее окно:

ssh -X example-host

После входа в систему вы можете запустить графическое приложение командой – например:

firefox

Этот сценарий полезен, если вычисления происходят на сервере, а локальная машина используется только для управления.

Подключение через цепочку серверов

В сложных сетях не всегда можно подключиться к нужному серверу напрямую: он может находиться в изолированном сегменте, куда нет открытого доступа. В таких случаях используется прыжки по хостам:

ssh -J example-host1,example-host2 user@example-host3

SSH автоматически выстраивает цепочку: сначала подключается к host1, оттуда – к host2, а уже с host2 – к целевому host3.

Заключение

SSH‑туннели – это универсальный инструмент для безопасного взаимодействия с удаленными системами. Вся информация, которая проходит через такое соединение, шифруется, а значит, посторонние не смогут ее прочитать или изменить.

С помощью SSH‑туннелей можно решать разные задачи:

SSH‑туннели просты в настройке и хорошо защищают данные. Поэтому их часто используют администраторы и разработчики, чтобы безопасно работать с удаленными серверами.

Блок FAQ

Что такое SSH-туннель?

Защищенное соединение между вашим компьютером и удаленным сервером, через которое передается зашифрованная информация.

Зачем нужен SSH‑туннель?

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

Что значит пробросить порт?

Пробросить порт – значит настроить перенаправление трафика с одного порта на другой через защищенное соединение, например, SSH‑туннель.

Какие порты можно пробрасывать?

Можно пробрасывать любые TCP-порты в диапазоне 1–65535, кроме зарезервированных системными службами (как правило, порты ниже 1024). Главное условие: порт не должен быть занят на локальной машине и на удаленном сервере. Если нужный порт уже используется – выберите другой свободный.

Для чего нужен порт 9999?

Это свободный порт. У него нет строго закрепленной задачи. Но его часто используют:

Какие есть ограничения у SSH-туннелей?

Основные ограничения SSH‑туннелей:

Как проверить статус SSH-туннеля?

Самый простой способ – проверить, запущен ли SSH-процесс с нужными параметрами:

ps aux | grep ssh

Если туннель активен, вы увидите команду с флагами -L, -R или -D.

Второй вариант – проверить, прослушивается ли нужный порт:

ss -ltn | grep 8081

или

netstat -an | grep 8081

Если порт открыт и прослушивается, туннель работает.

Перейти на оригинал