Что такое 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
Откройте терминал:
- Linux — нажмите сочетание клавиш Ctrl+Alt+T,
- MacOS — нажмите комбинацию клавиш Command (⌘) + Пробел, введите в поисковой строке Терминал и нажмите Enter.
-
2
Введите команду:
ssh-keygen -t rsa
-
3
Далее в терминале появится диалог:
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Если вы хотите сохранить ключ в /home/user/.ssh/id_rsa, нажмите Enter. Если вы хотите сохранить ключ в другой директории или в файле с другим названием, введите путь до нужного файла.
-
4
Затем система предложит ввести кодовое слово для дополнительной защиты ключа:
Enter passphrase (empty for no passphrase):
Введите кодовое слово и нажмите Enter. Если вы не хотите указывать кодовое слово, оставьте поле пустым и нажмите Enter.
-
5
Введите кодовое слово повторно:
Enter same passphrase again:
-
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
Далее необходимо перенести публичный ключ с локального компьютера на сервер. Сделать это можно вручную или автоматически.
Чтобы перенести ключ вручную, выведите содержимое файла 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. Ниже мы рассмотрим оба способа.
- 1 Откройте консоль PowerShell. Для этого нажмите сочетание клавиш Win+R, введите powershell и нажмите Enter.
-
2
Введите команду:
ssh-keygen -t rsa
-
3
Далее в консоли появится диалог:
Enter file in which to save the key (C:\Users\User/.ssh/id_rsa):
Если вы хотите сохранить ключ в указанной папке, нажмите Enter. Если вы хотите сохранить ключ в другой папке или в файле с другим названием, введите путь до нужного файла.
-
4
Затем система предложит ввести кодовое слово для дополнительной защиты ключа:
Enter passphrase (empty for no passphrase):
Введите кодовое слово и нажмите Enter. Если вы не хотите указывать кодовое слово, оставьте поле пустым и нажмите Enter.
-
5
Введите кодовое слово повторно:
Enter same passphrase again:
-
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
Далее необходимо перенести публичный ключ с локального компьютера на сервер. Для этого выведите содержимое файла id_rsa.pub с помощью команды:
cat ~/.ssh/id_rsa.pub
Затем скопируйте ключ и добавьте его на сервер в файл ~/.ssh/authorized_keys:
nano ~/.ssh/authorized_keys
На этом создание ключей завершено. Чтобы создать SSH-туннель к удаленному серверу, введите команду:
ssh root@yourserver
где yourserver — IP-адрес вашего сервера.
- 1 Скачайте и установите PuTTY по инструкции. PuTTYgen установится вместе с PuTTY.
- 2 Запустите PuTTYgen.
-
3
Выберите тип ключа — RSA. Укажите длину ключа в битах. Затем нажмите кнопку Generate:
-
4
При необходимости введите кодовое слово для дополнительной защиты ключа. Затем нажмите Save private key и сохраните приватный ключ:
-
5
Скопируйте публичный ключ и добавьте его на сервер в файл ~/.ssh/authorized_keys:
Для подключения вы также можете использовать 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
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊