Одним из существенных недостатков протокола VNC (Virtual Network Computing, виртуальная сетевая система) для организации удаленного подключения до компьютеров является полное отсутствие шифрования сеанса. Об отсутствии шифрования говорится, в частности, на странице часто задаваемых вопросов о программе TightVNC:
Одним из способов решения данной проблемы является организация SSH-туннеля, поверх которого будет запускаться сессия VNC, что обеспечит полное шифрование запущенной сессии VNC. SSH-туннель создает зашифрованный канал передачи данных между клиентским устройством и сервером. Помимо установки защищенного соединения для доступа до удаленного устройства, при помощи SSH-туннеля также можно передавать данные.
В данной статье мы рассмотрим несколько способов по организации SSH-туннеля, включая использование стандартной утилиты ssh
, а также при помощи сторонних клиентских программ, таких как PuTTY и MobaXterm.
Предварительные требования
- Сервер или виртуальная машина с установленным VNC. В качестве реализации VNC можно воспользоваться программой TightVNC. Мы описывали ее установку в отдельной статье.
- Второй сервер или виртуальная машина с предустановленной ОС Linux с графической оболочкой. Использовать можно любой современный дистрибутив Linux. Также в качестве клиентского устройства можно использовать домашний компьютер или ноутбук с ОС Windows, причем можно использовать как домашние (Home) и профессиональные версии, так и редакции Windows Server.
vds
Создание SSH-туннеля при помощи стандартной утилиты ssh
Для начала организуем SSH-туннель при помощи стандартного OpenSSH-клиента, который предустановлен по умолчанию практически во всех современных дистрибутивах Linux, а также в операционных системах семейства Windows, начиная с Windows 10 версии 1709 и выше, Windows 11, Windows Server 2019 и Windows Server 2022. Также на Windows системах можно использовать любые дистрибутивы WSL (Windows Subsystem for Linux — подсистема Linux для Windows). Команда используемая ниже одинакова будет работать как в Linux-дистрибутивах, так и в Windows:
ssh -L 5901:localhost:5901 root@147.45.146.116
Где:
-L
— ключ, отвечающий за проброс локального порта. При локальном пробросе происходит проброс порта из клиентского устройство на сервер. Все последующие установленные соединения на данный локальный порт будут проходить через SSH-туннель.5901:localhost:5901
— синтаксис для проброса удаленного порта. В данном примере мы сообщаем SSH, что хотим пробросить порт 5901 (порт VNC-сервера), который находится на удаленном сервере, с целью получить доступ до VNC-сервера. В свою очередь мы также открываем порт (в данном случае 5901) на своем устройстве (localhost).root@147.45.146.116
— стандартный синтаксис для подключения по протоколу SSH видалогин@адрес_удаленного_сервера
.
После того как команда будет введена, система запросит пароль от используемого пользователя, и при правильном вводе вы попадете на сервер. После этого в системе будет организован SSH-туннель. Важно не отключаться от сервера, чтобы не оборвать SSH-сессию.
Если необходимо запустить SSH-туннель в режиме «демона» (в фоновом режиме), то воспользуйтесь опциями -fNT
, например:
ssh -fNT -L 5901:localhost:5901 root@147.45.146.116
Где:
-f
— после ввода пароля пользователя вместо приглашения к вводу оболочки запущенный процессssh
перейдет в фоновой режим;N
— не выполнять никакую команду на удаленном сервере после запуска тоннеля;T
— отключает использование терминала.
После того как SSH-туннель был успешно установлен, можно подключаться при помощи любой клиентской утилиты для VNC, например TightVNC Connection. Запускаем утилиту и в поле «Remote Host» вводим адрес localhost::5901
:
Обратите внимание на использование двух символов двоеточия после localhost — данная особенность применима только к программе TightVNC Connection.
После ввода адреса нажимаем на кнопку «Connect». Программа запросит пароль от VNC-сессии, который задается на этапе настройки сервера VNC:
После того как пароль будет введен, откроется окно с графическим интерфейсом сервера:
Весь трафик от вашего устройства до сервера VNC теперь полностью защищен и зашифрован.
Создание SSH туннеля при помощи PuTTY
Помимо использования стандартной утилиты ssh
, организовать туннель можно при помощи популярной клиентской утилиты для подключения к удаленным серверам — PuTTY. Для этого выполняем следующие шаги:
- Запускаем PuTTY и в главном меню заполняем следующие поля:
-
- Host Name (or IP address) — прописываем IP-адрес сервера VNC;
- Port — задаем порт который использует SSH;
- Saved Sessions — вводим любое имя для создаваемой сессии с целью ее дальнейшего сохранения и быстрого запуска SSH-туннеля.
Далее нажимаем на кнопку «Save» чтобы сохранить текущую сессию:
- Далее в меню слева ищем раздел «Connection», раскрываем его и переходим в «Tunnels»:
- В открывшемся разделе заполняем следующую информацию:
-
- Source port — указываем порт, который будет открыт на клиентском устройстве, например 5901;
- Destination — прописываем IP-адрес сервера VNC, а также порт VNC-сервера.
После того как все данные введены, нажимаем на кнопку «Add»:
- Возвращаемся в главное меню PuTTY (раздел «Session») и подключаемся к серверу, нажав на кнопку «Open». При первом входе на сервер необходимо принять host key, нажав на кнопку «Accept»:
- После ввода пароль от учетной записи откроется терминал сервера:
- Не закрывая окно PuTTY сессии, открываем клиентское приложение, например, TightVNC Connection, и вводим адрес
localhost:5901
:
После ввода пароля от VNC-сессии отобразится графический интерфейс сервера:
Создание SSH туннеля при помощи MobaXterm
Еще одной популярной программой на ОС Windows для удаленного подключения к серверам является MobaXterm. С ее помощью тоже можно организовать SSH-туннель. Для этого выполним следующие шаги:
- Запускаем программу и сверху ищем пункт «Tunneling»:
- При открытии окна с настройками туннеля убеждаемся, что выбрана опция «Local port forwarding», а также заполняем следующие данные:
-
- В разделе «My computer with MobaXterm» вводим локальный порт (5901), который будет открыт на устройстве;
- В разделе «SSH server» прописываем адрес удаленного сервера VNC, логин и пароль для подключения к серверу;
- В разделе «Remote server» указываем адрес
localhost
и порт5901
.
Для сохранения настроек нажимаем на кнопку «Save».
- В открывшемся окне нажимаем на кнопку запуска в разделе «Start/stop»:
- После того как SSH-туннель был запущен, переходим в раздел «Session»:
В пункте «Remote hostname or IP address» вводим localhost
, а в пункте «Port» вводим 5901
:
Для подключения нажимаем на кнопку «OK».
После ввода пароля от VNC-сесиии откроется графическая оболочка сервера:
Выгодные тарифы на VDS/VPS в Timeweb Cloud
Заключение
Несмотря на то, что протокол VNC по умолчанию не шифрует свой трафик, эту проблему можно решить использованием SSH-туннеля. В данной статье мы рассмотрели несколько способов организации SSH-туннеля на вашем устройстве.