Настройка SSH-туннеля для организации защищенного подключения по протоколу VNC
Одним из существенных недостатков протокола VNC (Virtual Network Computing, виртуальная сетевая система) для организации удаленного подключения до компьютеров является полное отсутствие шифрования сеанса. Об отсутствии шифрования говорится, в частности, на странице часто задаваемых вопросов о программе TightVNC:
Одним из способов решения данной проблемы является организация SSH-туннеля, поверх которого будет запускаться сессия VNC, что обеспечит полное шифрование запущенной сессии VNC. SSH-туннель создает зашифрованный канал передачи данных между клиентским устройством и сервером. Помимо установки защищенного соединения для доступа до удаленного устройства, при помощи SSH-туннеля также можно передавать данные.
В данной статье мы рассмотрим несколько способов по организации SSH-туннеля, включая использование стандартной утилиты ssh, а также при помощи сторонних клиентских программ, таких как PuTTY и MobaXterm.
Предварительные требования
- Сервер или виртуальная машина с установленным VNC. В качестве реализации VNC можно воспользоваться программой TightVNC. Мы описывали ее установку в отдельной статье.
- Второй сервер или виртуальная машина с предустановленной ОС Linux с графической оболочкой. Использовать можно любой современный дистрибутив Linux. Также в качестве клиентского устройства можно использовать домашний компьютер или ноутбук с ОС Windows, причем можно использовать как домашние (Home) и профессиональные версии, так и редакции Windows Server.
Создание 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
900 ₽/мес
1 080 ₽/мес
Заключение
Несмотря на то, что протокол VNC по умолчанию не шифрует свой трафик, эту проблему можно решить использованием SSH-туннеля. В данной статье мы рассмотрели несколько способов организации SSH-туннеля на вашем устройстве.
Хотите внести свой вклад?
вознаграждение или запросите нужную вам инструкцию

