- Connect to VNC Server via SSH Tunnel
- Connect to VNC Server via SSH Tunnel
- Connect to VNC Server with vncviewer -via Option
- Install TigerVNC Client on CentOS/RHEL Derivatives
- Install TigerVNC Client on Ubuntu/Debian Derivatives
- Connect to VNC Server via SSH Local Port Forwarding
- VPS на Linux с графическим интерфейсом: запускаем сервер VNC на Ubuntu 18.04
- Оглавление:
- Выбор сервера VNC
- Установка и настройка
- Запуск службы через systemd
- Подключение к рабочему столу
Connect to VNC Server via SSH Tunnel
How do you remotely connect to a VNC server? Well in this guide, we are going to learn how to connect to VNC server via SSH tunnel. VNC connections and unencrypted and thus poses security risks. To secure VNC connection, connections can be made through the use of SSH protocol.
Connect to VNC Server via SSH Tunnel
In our previous guide, on how to install and configure VNC server on CentOS 8, we saw how to test local VNC server connection using TigerVNC client, vncviewer .
- You can connect to a VNC server through the VNC client ( vncviewer ) with the -via command line option which enables it to automatically create an encrypted TCP tunnel to VNC server before connection is established between the client and the server. It then connects to the server through that tunnel. It basically invokes SSH local port forwarding.
- You can also connect to VNC server using SSH local port forwarding. Once connection is established, you can locally connect to VNC server via vncviewer.
Connect to VNC Server with vncviewer -via Option
Install TigerVNC Client on CentOS/RHEL Derivatives
TigerVNC client ( vncviewer ) is provided by the tigervnc package on CentOS and similar derivatives. In case you have not already installed it, simply run the command below to install;
Install TigerVNC Client on Ubuntu/Debian Derivatives
apt install tigervnc-viewer
You can even use xvnc4viewer;
Once the installation is done, you can now connect to a VNC server by executing the command below;
- USER : is any user that can ssh into the VNC server
- HOST : is the VNC server address. It can be IP address or hostname (if you have DNS)
- [host:displayNum] : specifies the display number to connect to on the VNC server. If you restricted VNC access to allow only encrypted connections from the loopback interface, you would simply use the localhost:1 to connect to the display number 1. Otherwise, you can specify the IP address or hostname if VNC allows connection on all interfaces.
For example, to login to second display number of the VNC server accepting connections on loopback interface as user amos;
When run, the command first prompts you to enter the SSH password. After that, you are prompted to enter the password to access the specified display number.
VNC Viewer Free Edition 4.1.1 for X - built Feb 25 2015 22:57:51 Copyright (C) 2002-2005 RealVNC Ltd. See http://www.realvnc.com for information on VNC. [email protected]'s password: SSH PASSWORD Sun Oct 6 13:52:08 2019 CConn: connected to host localhost port 5599 CConnection: Server supports RFB protocol version 3.8 CConnection: Using RFB protocol version 3.8 Password: DISPLAY-NUMBER PASSWORD .
Connect to VNC Server via SSH Local Port Forwarding
With ssh local port forwarding to the VNC server, from your desktop Linux system with SSH client installed, execute the command;
- Option -L specifies SSH local port forwarding
- 5001 is the local port on the local Linux system from where you will connect to remote VNC server.
- locahost:5901 is the remote VNC server and the display number to connect to. (In this case, it is the same VNC server as VNC-SERVER-ADDRESS since we configured it to allow connections on loopback interface only)
- [email protected] is the SSH user for login to VNC Server.
For example, to connect to display number 1 on the remote VNC server (192.168.56.123), that allows VNC connections only on loopback interface, from the local system through SSH tunnel, simply run;
VPS на Linux с графическим интерфейсом: запускаем сервер VNC на Ubuntu 18.04
Некоторые пользователи арендуют относительно недорогие VPS с Windows для запуска сервиса удаленных рабочих столов. То же самое можно сделать и на Linux без размещения в датацентре собственного железа или аренды выделенного сервера. Кому-то нужна привычная графическая среда для тестов и разработки или удаленный десктоп с широким каналом для работы с мобильных устройств. Есть масса вариантов применения основанной на протоколе Remote FrameBuffer (RFB) системы Virtual Network Computing (VNC). В небольшой статье мы расскажем, как настроить ее на виртуальной машине с любым гипервизором..
Оглавление:
Выбор сервера VNC
Сервис VNC может быть встроен в систему виртуализации, при этом гипервизор свяжет его с эмулируемыми устройствами и никакой дополнительной настройки не потребуется. Этот вариант предполагает значительные накладные расходы и поддерживается далеко не всеми провайдерами — даже в менее ресурсоемкой реализации, когда вместо эмуляции реального графического устройства виртуальной машине передается упрощенная абстракция (фреймбуфер). Иногда VNC-сервер привязывается к работающему X-серверу, но этот способ больше подходит для доступа к физической машине, а на виртуальной он создает ряд технических сложностей. Проще всего установить VNC-сервер со встроенным X-сервером. Он не требует наличия физических устройств (видеоадаптера, клавиатуры и мыши) или их эмуляции с помощью гипервизора, а потому подходит для VPS любого типа.
Установка и настройка
Нам потребуется виртуальная машина с Ubuntu Server 18.04 LTS в конфигурации по умолчанию. В стандартных репозиториях этого дистрибутива есть несколько серверов VNC: TightVNC, TigerVNC, x11vnc и прочие. Мы остановились на TigerVNC — актуальном форке не поддерживаемого разработчиком TightVNC. Настройка других серверов выполняется сходным образом. Также нужно выбрать окружение рабочего стола: оптимальным, на наш взгляд, вариантом будет XFCE из-за относительно невысоких требований к вычислительным ресурсам. Желающие могут установить другой DE или WM: тут все зависит от личных предпочтений, однако выбор ПО напрямую влияет на потребность в оперативной памяти и вычислительных ядрах.
Установка окружения рабочего стола со всеми зависимостями выполняется следующей командой:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
Дальше необходимо инсталлировать сервер VNC:
sudo apt-get install tigervnc-standalone-server tigervnc-common
Запускать его с правами суперпользователя — плохая идея. Создаем пользователя и группу:
Добавим пользователя в группу sudo, чтобы он мог решать связанные с администрированием задачи. Если такой потребности нет, этот шаг можно пропустить:
На следующем шаге нужно запустить сервер VNC с привилегиями пользователя vnc, чтобы создать безопасный пароль и конфигурационные файлы в каталоге ~/.vnc/. Длина пароля может быть от 6 до 8 символов (лишние обрезаются). При необходимости также задается пароль только для просмотра, т.е. без доступа к клавиатуре и мыши. Следующие команды выполняются от имени пользователя vnc:
su - vnc vncserver -localhost no
По умолчанию протокол RFB использует диапазон TCP-портов от 5900 до 5906 — это т.н. порты дисплея, каждый из которых соответствует экрану X-сервера. При этом порты ассоциированы с экранами от :0 по :6. Запущенный нами экземпляр сервера VNC слушает порт 5901 (экран :1). Прочие экземпляры могут работать на других портах с экранами :2, :3 и т. д. Перед дальнейшей настройкой нужно остановить сервер:
Команда должна вывести примерно такое сообщение: «Killing Xtigervnc process ID 18105… success!».
При запуске TigerVNC выполняет сценарий ~/.vnc/xstartup для настройки параметров конфигурации. Создадим собственный скрипт, предварительно сохранив резервную копию имеющегося, если он существует:
mv ~/.vnc/xstartup ~/.vnc/xstartup.b nano ~/.vnc/xstartup
Сеанс окружения рабочего стола XFCE запускается следующим скриптом xstartup:
#!/bin/bash unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS xrdb $HOME/.Xresources exec /usr/bin/startxfce4 &
Команда xrdb необходима, чтобы система VNC прочитала файл .Xresources в домашнем каталоге. Там пользователь может определить различные параметры графического рабочего стола: рендеринг шрифтов, цвета терминала, темы курсора и т.д. Сценарий необходимо сделать исполняемым:
На этом настройка сервера VNC завершена. Если запустить его командой vncserver -localhost no (от имени пользователя vnc), можно будет подключиться с заданным ранее паролем и увидеть такую картину:
Запуск службы через systemd
Ручной запуск сервера VNC плохо подходит для боевого применения, поэтому мы настроим системную службу. Команды выполняются от имени root (используем sudo). Для начала создаем новый юнит-файл для нашего сервера:
sudo nano /etc/systemd/system/vncserver@.service
Символ @ в имени позволяет передавать аргумент для настройки службы. В нашем случае он задает порт дисплея VNC. Юнит-файл состоит из нескольких разделов:
[Unit] Description=TigerVNC server After=syslog.target network.target [Service] Type=simple User=vnc Group=vnc WorkingDirectory=/home/vnc PIDFile=/home/vnc/.vnc/%H:%i.pid ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x960 :%i ExecStop=/usr/bin/vncserver -kill :%i [Install] WantedBy=multi-user.target
Затем нужно уведомить systemd о появлении нового файла и активировать его:
sudo systemctl daemon-reload sudo systemctl enable vncserver@1.service
Цифра 1 в имени задает номер экрана.
Останавливаем сервер VNC, запускаем его как службу и проверяем статус:
# от имени пользователя vnc vncserver -kill :1
# с привилегиями суперпользователя sudo systemctl start vncserver@1 sudo systemctl status vncserver@1
Если служба работает, мы должны получить примерно такой результат.
Подключение к рабочему столу
Наша конфигурация не использует шифрование, поэтому сетевые пакеты могут быть перехвачены злоумышленниками. К тому же в VNC-серверах достаточно часто находят уязвимости, так что открывать их для доступа из интернета не стоит. Для безопасного подключения на локальном компьютере нужно упаковать трафик в туннель SSH, а затем настроить клиент VNC. Под Windows можно использовать графический клиент SSH (например, PuTTY). Для безопасности TigerVNC на сервере слушает только localhost и недоступен напрямую из сетей общего пользования:
В Linux, FreeBSD, OS X и прочих UNIX-подобных ОС туннель с клиентского компьютера делается с помощью утилиты ssh (на сервере VNC должен быть запущен sshd):
ssh -L 5901:127.0.0.1:5901 -C -N -l vnc vnc_server_ip
Опция -L привязывает порт 5901 удаленного подключения к порту 5901 на localhost. Опция -C включает сжатие, а -N указывает утилите ssh на отсутствие необходимости выполнять удаленную команду. Опция -l задает login для удаленного входа в систему.
После настройки туннеля на локальном компьютере необходимо запустить клиент VNC и установить соединение с хостом 127.0.0.1:5901 (localhost:5901), использовав для доступа к серверу VNC заданный ранее пароль. Теперь мы можем безопасно взаимодействовать через шифрованный туннель с графическим окружением рабочего стола XFCE на VPS. На скриншоте в эмуляторе терминала запущена утилита top, чтобы показать незначительное потребление виртуальной машиной вычислительных ресурсов. Дальше все будет зависеть от пользовательских приложений.
Установить и настроить сервер VNC в Linux можно практически на любом VPS. Для этого не нужны дорогостоящие и ресурсоемкие конфигурации с эмуляцией видеоадаптера или покупка коммерческих лицензий на программное обеспечение. Помимо рассмотренного нами варианта системной службы есть и другие: запуск в режиме демона (через /etc/rc.local) при загрузке системы или по требованию через inetd. Последний интересен для создания многопользовательских конфигураций. Интернет-суперсервер запустит сервер VNC и свяжет с ним клиента, а VNC-сервер создаст новый экран и начнет сессию. Для аутентификации внутри нее можно использовать графический дисплейный менеджер (например, LightDM), а после отключения клиента сессия будет закрыта и все работающие с экраном программы завершены.