Купить Корзина
  • Вход
  • Помощь
  • Рег.облако
  • Облачные серверы
  • Работа с сервером
  • SSH-туннели: настройка и примеры практического использования

SSH-туннели: настройка и примеры практического использования

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

SSH — это сетевой протокол, который обеспечивает безопасный удаленный доступ к операционной системе сервера. Он создает защищенный канал связи между двумя устройствами, позволяет пользователям безопасно подключаться к удаленной ОС и передавать данные. Узнать больше о протоколе SSH вы можете в статье: Что такое SSH.

SSH-туннелирование устанавливает зашифрованное соединение между двумя машинами через незащищенную сеть. Оно позволяет создать защищенный канал между локальным и удаленным узлом, обеспечивая безопасную передачу данных и доступ к ним. SSH-туннелирование также называют пробросом портов. Эта технология подразумевает туннелирование любого порта TCP/IP через SSH. Другими словами, SSH tunnels — это функция, которая позволяет передавать TCP-пакеты с локальной машины на удаленную через SSH-соединение, а также производить трансляцию IP-заголовка во время передачи информации по заранее заданному правилу.

Туннели SSH и VPN значительно отличаются по функциональности. При использовании VPN-туннеля передача информации может производиться в любом направлении. SSH-туннели создают канал связи с одной точкой входа, следовательно, передают информацию только в одном направлении. Кроме того, SSH-туннели работают только с TCP-пакетами — использовать другие протоколы транспортного уровня не получится.

Как создать SSH tunnel

Для идентификации пользователя необходимо сгенерировать два ключа: приватный и публичный. Публичный ключ хранится на сервере, а приватный — на компьютере пользователя.

Создание SSH-ключей в Linux и MacOS

Чтобы создать SSH-ключи:

  1. 1.

    Откройте терминал:

    • Linux — нажмите сочетание клавиш Ctrl+Alt+T,
    • MacOS — нажмите комбинацию клавиш Command (⌘) + Пробел, введите в поисковой строке Терминал и нажмите Enter.
  2. 2.

    Введите команду:

    ssh-keygen -t rsa
  3. 3.

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

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

    Если вы хотите сохранить ключ в /home/user/.ssh/id_rsa, нажмите *Enter*. Если вы хотите сохранить ключ в другой директории или в файле с другим названием, введите путь до нужного файла.

  4. 4.

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

    Enter passphrase (empty for no passphrase):

    Введите кодовое слово и нажмите Enter. Если вы не хотите указывать кодовое слово, оставьте поле пустым и нажмите Enter.

  5. 5.

    Введите кодовое слово повторно:

    Enter same passphrase again:
  6. 6.

    После успешной генерации пары ключей в терминале появится сообщение:

    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:
    SHA256:9dqaaQga+Yi1auGF1p1JFH2lfGi5cA0EU9JQo8bPwSM user@ubuntu
    The key's randomart image is:
    +---[RSA 3072]----+
    |      .o=B*..    |
    |      ...*oB     |
    |     .  E.% o    |
    |      .. O *     |
    |   o + oS + .    |
    |  + * =    o     |
    | o = * . .. .    |
    |  + + . . .+     |
    | ...     .+      |
    +----[SHA256]-----+
  7. 7.

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

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

    cat ~/.ssh/id_rsa.pub

    Затем скопируйте ключ и добавьте его на сервер в файл ~/.ssh/authorized_keys:

    nano ~/.ssh/authorized_keys

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

    ssh-copy-id user@yourserver

    где:

    • user — имя пользователя на сервере,
    • yourserver — IP-адрес вашего сервера.

На этом создание ключей завершено. Чтобы создать SSH-туннель к удаленному серверу, введите команду:

ssh root@yourserver

где yourserver — IP-адрес вашего сервера.

Создание SSH-ключей в Windows

Создать SSH-ключи в Windows можно двумя способами: через PowerShell и при помощи PuTTYgen. Ниже мы рассмотрим оба способа.

через PowerShell
с помощью PuTTYgen
  1. 1.
    Откройте консоль PowerShell. Для этого нажмите сочетание клавиш Win+R, введите powershell и нажмите Enter.
  2. 2.

    Введите команду:

    ssh-keygen -t rsa
  3. 3.

    Далее в консоли появится диалог:

    Enter file in which to save the key (C:\Users\User/.ssh/id_rsa):

    Если вы хотите сохранить ключ в указанной папке, нажмите Enter. Если вы хотите сохранить ключ в другой папке или в файле с другим названием, введите путь до нужного файла.

  4. 4.

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

    Enter passphrase (empty for no passphrase):

    Введите кодовое слово и нажмите Enter. Если вы не хотите указывать кодовое слово, оставьте поле пустым и нажмите Enter.

  5. 5.

    Введите кодовое слово повторно:

    Enter same passphrase again:
  6. 6.

    После успешной генерации пары ключей в терминале появится сообщение:

    Your identification has been saved in C:\Users\User/.ssh/id_rsa
    Your public key has been saved in C:\Users\User/.ssh/id_rsa.pub
    The key fingerprint is:
    SHA256:Jb+jOl5F3vAhrn0hTSyKlTifzhBGGO7qDIC2sVPIII0 User@LAPTOP
    The key's randomart image is:
    +---[RSA 3072]----+
    |    .o.          |
    | o ... . . .     |
    |E . . = + * +    |
    |= .. . * X O .   |
    |o= .. o S * =    |
    |o =.   + + o .   |
    |.+.     = + .    |
    | +.   .. . o     |
    |  o  .oo.        |
    +----[SHA256]-----+
  7. 7.

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

    cat ~/.ssh/id_rsa.pub

    Затем скопируйте ключ и добавьте его на сервер в файл ~/.ssh/authorized_keys:

    nano ~/.ssh/authorized_keys

На этом создание ключей завершено. Чтобы создать SSH-туннель к удаленному серверу, введите команду:

ssh root@yourserver

где yourserver — IP-адрес вашего сервера.

  1. 1.
    Скачайте и установите PuTTY по инструкции. PuTTYgen установится вместе с PuTTY.
  2. 2.
    Запустите PuTTYgen.
  3. 3.

    Выберите тип ключа — RSA. Укажите длину ключа в битах. Затем нажмите кнопку Generate: ssh tunneling 1

  4. 4.

    При необходимости введите кодовое слово для дополнительной защиты ключа. Затем нажмите Save private key и сохраните приватный ключ: ssh tunneling 2

  5. 5.

    Скопируйте публичный ключ и добавьте его на сервер в файл ~/.ssh/authorized_keys: ssh tunneling 3

    Для подключения вы также можете использовать PuTTY. О том, как работать с PuTTY, вы можете прочитать в статье: Что такое PuTTY.

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

При помощи SSH-туннеля вы можете безопасно подключиться к домашней или корпоративной сети, даже если используете общедоступный Wi-Fi в общественном месте. Для этого необходимо запустить SSH-прокси и создать SSH-туннель в нужную сеть. Но нужно помнить, что приложения, с которыми вы будете работать после подключения, должны поддерживать SOCKS-прокси.

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

ssh -D 8888 user@yourserver

Эта команда запускает SOCKS-прокси. Для работы используется порт 8888. Служба работает только на localhost. Внеся небольшие изменения в команду, можно включить прослушивание всех интерфейсов, в том числе Ethernet и Wi-Fi. Так приложения смогут подключаться к прокси-серверу через SSH proxy:

ssh -D 0.0.0.0:8888 user@yourserver

Для корректной работы браузера необходимо внести настройки. К примеру, для запуска Google Chrome с активированным SOCKS-прокси нужно ввести команду:

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

Эта команда создаст SOCKS-прокси и инициирует туннелирование DNS-запросов.

Зачем нужны динамические SSH-туннели

Динамический SSH-туннель открывает локальный TCP-сокет, чтобы использовать его как SOCKS4/SOCKS5 прокси. Чаще всего его используют в случаях, когда необходим VPN, а развернуть его невозможно. Также использование динамического туннеля подходит для случаев, когда пользователю нужно выйти в интернет однократно.

Пример создания динамического SSH-туннеля:

ssh -D 1080 user@yourserver

В этом примере SOCKS-прокси работает через 1080 порт.

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

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

Проброс портов

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

ssh  -L 9999:127.0.0.1:80 user@yourserver

В этом примере для прослушки используется порт 9999, а для проброса — 80 порт.

Обратный SSH-туннель

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

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

В этом примере соединение идет от порта 1999 к удаленному серверу, а после к 902 порту на локальном компьютере пользователя.

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

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

ssh yourserver “touch newfile.txt”

Например, эта команда создаст на удаленном сервере файл newfile.txt.

Rsync через SSH

Rsync — это утилита, которая используется для удаленной синхронизации и копирования файлов. Ее удобно использовать для регулярного создания бэкапов. Пример:

rsync -az /home/user/data yourserver:backup/

С помощью этой команды данные из директории /home/user/data на удаленном сервере будут скопированы в папку backup на локальном компьютере пользователя.

Запуск GUI-приложений

С помощью SSH-туннеля вы можете запустить GUI-приложение на удаленной машине.

Пример запуска VMware на удаленном сервере:

ssh -X yourserver vmware

Интерфейс приложения будет доступен на локальном компьютере, а само приложение будет запущено на удаленном сервере. Обратите внимание: для успешного запуска команды необходимо установить пакеты X11, а также прописать «X11Forwarding yes» в файле sshd_config.

Прыжки по хостам

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

ssh -J host1,host2,host3 user@host4

Помогла ли вам статья?

Спасибо за оценку. Рады помочь 😊

 👍
Рассылка Рег.ру

Лайфхаки, скидки и новости об IT

Подписываясь, вы принимаете правила рассылок

Продукты
  • Домены
  • Хостинг
  • Создание сайтов
  • Рег.облако
  • Серверы и ДЦ
  • SSL-сертификаты
  • Сервисы
Полезное
  • Стоимость услуг
  • База знаний
  • Документы
  • Whois
  • Магазин доменов
  • ЭДО
  • Партнерам
  • Сообщить о нарушении
Компания
  • О компании
  • Контакты
  • Офисы
  • Новости
  • Акции и скидки
  • Мероприятия
  • Блог
  • Отзывы клиентов
+7 495 580-11-11 Телефон в Москве
8 800 555-34-78 Бесплатный звонок по России
  • vk
  • telegram
  • ok
  • moikrug
  • youtube
  • twitter
  • Банковская карта
  • Система быстрых платежей
  • SberPay
  • QIWI-кошелёк
  • ЮMoney
  • Наличные
  • Безналичный перевод
Все способы оплаты

Нашли опечатку?
Выделите и нажмите Ctrl+Enter

  • © ООО «РЕГ.РУ»

    Правовая информация и правила пользования

  • Мы используем файлы cookie. Продолжив работу с сайтом, вы соглашаетесь с Политикой обработки персональных данных и Правилами пользования сайтом.