Unlocked VPN для iPhone. 7 дней бесплатно, далее 99 ₽/месЗагрузить в AppStore

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

Blog

SSH-туннели нужны для установки защищенных каналов между локальной машиной и удалённым сервером. Через них можно, например, передавать и редактировать файлы, запускать приложения, сохранять резервные копии.

Ssh Туннели  Практические Примеры И Основные Функции

Как устроен туннель

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

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

При сравнении SSH и VPN важно понимать разницу. После настройки VPN информацию можно передавать в любом направлении. Secure Shell же — это проброс портов поверх протокола. У такого канала связи есть одна точка входа и одна точка выхода.

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

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

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

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

ssh-keygen -t rsa

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

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 через любой текстовый редактор или вывести его содержимое в терминале:

cat ~/.ssh/id_rsa.pub

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

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

ssh-copy-id user@remoteserver

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

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

ssh root@HOST

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

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

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

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

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

Windows

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

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

ssh-keygen -t rsa

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

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

cat ~/.ssh/id_rsa.pub

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

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

ssh root@HOST

Вместо параметра 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-прокси. Часто применяется, когда нужен VPN, но развернуть его нельзя. Такой туннель отвечает всем требованиям безопасности.

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

ssh -D 1080 user@vps.example.com

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

Для 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.

Rsync через SSH

Бэкапы важных данных можно делать с помощью 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/

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

Тарифы VDS

Заключение

В этой статье мы узнали, что такое SSH-туннель, как им пользоваться, как его настроить на Linux, macOS и Windows, какие у него есть особенности и параметры конфигурации. Несколько распространенных сценариев также описаны в примерах использования. 

Запоминать все команды и аргументы не нужно. Основные операции вы быстро начнёте делать на автомате, а более сложные случаи всегда можно посмотреть в справке или нашем руководстве на cloud.timeweb.com

Telegram
VK
Скопировать ссылку

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону