SSH-туннели: практические примеры и основные функции

    Команда Simple-Server
    03.06.2026
    8 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    SSH — это Secure Shell, защищённый сетевой протокол для удалённого управления. Он шифрует трафик и работает со всеми популярными операционными системами.

    Для установки безопасного подключения к удалённой машине используется SSH-туннелирование.**** Однако под туннелем здесь подразумевается не инкапсуляция одного протокола в другом. Речь идёт о том, что администратор выполняет через SSH проброс портов.**** Технология подразумевает передачу TCP-пакетов и трансляцию IP-заголовков при передаче информации, если соблюдаются правила.

    Для идентификации пользователя нужны два ключа — приватный и публичный (открытый). Открытый хранится на сервере, приватный — на локальной машине. Создание безопасного подключения**** отличается в зависимости от операционной системы.

    Ubuntu и другие дистрибутивы Linux/macOS

    Запустите терминал и выполните команду:

    В терминале появится диалог:

    Enter file in which to save the key (/home/user/.ssh/id_rsa):

    По умолчанию приватная часть сохраняется в папку .ssh в файл id_rsa. Вы можете указать другие адрес и имя файла.

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

    Enter passphrase (empty for no passphrase):

    После успешного создания пары ключей в терминале появится такая запись:

    Your identification has been saved in /home/user/.ssh/id_rsa. Your public key has been saved in /home/user/.ssh/id_rsa.pub. The key fingerprint is: 476:b2:a8:7f:08:b4:c0:af:81:25:7e:21:48:01:0e:98 user@localhost

    Теперь нужно скопировать публичный ключ и добавить его на удалённую машину. Можно открыть файл /home/user/.ssh/id_rsa.pub через любой текстовый редактор или вывести его содержимое в терминале:

    Скопируйте ключ и добавьте его на сервер. Убедитесь, что в нём нет пробелов и переносов.

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

    ssh-copy-id user@remoteserver

    Вместо user вы указываете имя пользователя, вместо remoteserver — хост или IP-адрес удалённой машины на Simple-Server или другой платформе.

    Создание безопасного подключения**** завершено. Чтобы подключиться через**** SSH-port,**** выполните:

    Вместо параметра HOST укажите публичный IP-адрес сервера, на который вы добавили открытый ключ. Если вы не создавали пароль для дополнительной защиты закрытой части, то вводить ничего больше не нужно. Система сверит открытый и закрытый ключи и при обнаружении соответствия установит защищенное соединение.****

    При первом подключении система**** предупредит о неизвестном хосте и уточнит, доверяете ли вы ему. Введите ‘yes’ и нажмите Enter.

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

    ssh -N -L -g 3389:192.168.0.105:3389 user@rt.example.com

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

    На Windows создать пару ключей можно двумя способами — через консоль PowerShell и с помощью программы PuTTygen (устанавливается вместе с PuTTy).

    Чтобы сгенерировать ключи через PowerShell, откройте терминал и выполните:

    Защитите приватный ключ паролем или оставьте поле пустым и нажмите Enter.

    По умолчанию открытый ключ сохраняется в файле ~/.ssh/id_rsa.pub. Приватный ключ с именем id_rsa лежит в той же папке. Откройте файл с публичным ключом через текстовый редактор или воспользуйтесь командой cat в PowerShell:

    Скопируйте публичный ключ и добавьте его на удаленный сервер.

    Чтобы подключиться к серверу, выполните:

    Вместо параметра HOST укажите публичный IP-адрес удаленного сервера, на который вы добавили открытый ключ. Если вы не создавали пароль для дополнительной защиты закрытого ключа, то вводить ничего больше не нужно. Система сверит открытый и закрытый ключи и при обнаружении соответствия установит SSH-туннель в Windows.****

    При первом подключении ОС предупредит о неизвестном хосте и уточнит, доверяете ли вы ему. Введите ‘yes’ и нажмите Enter.

    Чтобы сгенерировать пароль с помощью PuTTygen:

    1. Нажмите кнопку Generate.
    2. Подвигайте курсором в любом направлении до тех пор, пока строка прогресса не заполнится.
    3. Сохраните публичный и приватный ключи.
    4. Откройте файл с публичным ключом.
    5. Скопируйте публичный ключ и добавьте его на удаленный сервер.

    Для подключения к удалённому серверу также можно использовать программу PuTTy. Запустите программу, в поле Host Name введите имя или IP-адрес хоста и нажмите Open.

    Настроить в PuTTy SSH tunnel**** можно во вкладке Connection → SSH → Tunnels. Здесь указывается Source Port, Destination, а также параметры динамического подключения. Что это за настройки и как они влияют на соединение, рассмотрим далее.

    Как использовать SSH Proxy

    SSH-tunnel Proxy**** помогает организовать доступ к домашней или корпоративной системе. Важно только, чтобы приложения, которые используются для работы при подключении, поддерживали SOCKS-прокси. Один из вариантов такого использования туннелей — сотрудник подключается к рабочей сети, используя публичную сеть в другом конце мира, при этом вся информация шифруется.

    Для туннелирования через прокси достаточно выполнить:

    ssh -D 8888 user@remoteserver

    Этой командой вы запускаете SOCKS-прокси. Порт — 8888. В этом случае служба работает на localhost. Но можно изменить команду, чтобы прослушивать Ethernet и Wi-Fi. Это позволит приложениям подключаться к прокси-серверу через Secure Shell.

    Например, можно запустить браузер Google Chrome:

    google-chrome --proxy-server="socks5://192.168.1.10:8888"

    Команда создаёт SOCKS-прокси, а также инициирует туннелирование DNS-запросов

    Что такое динамический SSH-tunnel

    Динамический SSH-tunnel открывает локальный сокет TCP и использует его как SOCKS4/SOCKS5-прокси. Такой туннель отвечает всем требованиям безопасности.

    Динамический туннель также подходит для однократного выхода в интернет:

    ssh -D 1080 user@vps.example.com

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

    Для Windows динамический**** SSH-туннель в PuTTy настраивается на вкладке Connection → SSH → Tunnels.

    Примеры использования туннелей

    Рассмотрим несколько примеров использования туннелей.

    Проброс портов — SSH Port Forwarding

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

    ssh  -L 9999:127.0.0.1:80 user@remoteserver

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

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

    ssh -v -R 0.0.0.0:1999:127.0.0.1:902 192.168.1.100 user@remoteserver

    В этом туннеле соединение идёт от удалённого сервера к порту 1999, затем к порту 902 на локальной машине.

    Удалённое выполнение команд

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

    ssh remoteserver "cat /var/log/nginx/access.log" | grep badstuff.php

    После скачивания лога на удалённом сервере выполнится команда grep.

    Бэкапы важных данных можно делать с помощью bzip2. Порядок простой — сначала вы сжимаете каталог на удалённом сервере, а затем распаковываете на другой стороне: на локальной машине или на другом сервере, заведённом под хранение резервных копий. Пример команды:

    tar -cvj /datafolder | ssh remoteserver "tar -xj -C /datafolder"

    Если бэкапы нужно делать регулярно (обычно так и происходит), то проще использовать команду rsync:

    rsync -az /home/testuser/data proglibserver:backup/

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

    Через SSH-туннель можно запускать GUI-приложения на удалённом сервере:

    ssh -X remoteserver vmware

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

    Если сеть сегментирована, то при туннелировании придётся пройти через несколько хостов. При этой рабочий сеанс должен быть полностью зашифрованным. Добиться такого результата можно с помощью параметра -J. Для установления связи с каждым следующим хостом будет использоваться переадресация:

    ssh -J host1,host2,host3 user@host4.internal

    Локальная папка на удаленной машине

    С помощью sshfs можно примонтировать локальный каталог к удалённому серверу.

    sshfs user@proglibserver:/media/data ~/data/

    Это удобное решение для обмена файлами и выполнения других операций.


    Нужен сервер для практики? Закажите VPS на Simple-Server — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация? Посмотрите все доступные тарифы

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны