Термин Virtual Network Computing (сокращенно VNC) означает систему удаленного доступа к рабочему столу компьютера. Продукт позволяет взаимодействовать с интерфейсом, файлами на накопителе, приложениями и даже настройками операционной системы. Такая же схема администрирования используется при управлении виртуальными машинами, арендованными на мощностях провайдера timeweb.cloud.
В этом материале разберем, как создать настроенный сервер VNC на VPS/VDS с инсталлированной операционкой Debian 10 и подключение по защищенному каналу SSH. В качестве примера возьмем утилиту TightVNC. Она хорошо работает даже при соединении через низкоскоростную линию связи и обеспечивает бесперебойную передачу файлов в обе стороны (на сервер и с него на локальную машину).
Перед началом работ нужно подготовить сервер Debian, в облаке или локально. Помимо самой системы, желательно сразу настроить пользователя root и sudo (первый без привилегий, второй с ними). Также обязательно разрешить в брандмауэре коннект через SSH.
Еще понадобится:
Возможно использование и любой Linux. На нее можно установить один из продуктов – vinagre, krdc, RealVNC или TightVNC.
Изначально сервер встает без привычных визуальных окон, с которыми было бы удобно работать. Программы для удаленного управления на платформе также «по умолчанию» нет, поэтому первым делом мы их инсталлируем. В этой задаче возьмем за «основу» пакет среды рабочего стола Xfce и утилиту TightVNC, оба продукта расположены в официальном репозитории Debian.
Сначала проведем обновление перечня пакетов, уже имеющихся на хосте:
sudo apt update
Следующим шагом установим продукт Xfce:
sudo apt install xfce4 xfce4-goodies
При инсталляции система предлагает указать язык клавиатуры из предлагаемого перечня. От пользователя достаточно выбрать нужный вариант и нажать Enter, после этого процедура продолжится. По завершении можно сразу же поставить сервер TightVNC:
sudo apt install tightvncserver
По итогу требуется задать утилите первоначальные настройки VNC – пароль безопасности и сгенерировать файлы, где будут храниться конфигурационные параметры.
Vncserver
Программа предложит указать пароль с его подтверждением, который будет использоваться для коннекта с удаленной системой:
You will require a password to access your desktops.
Password:
Verify:
Необходимо внести пароль от 6 до 8 знаков, более длинные комбинации автоматом обрежутся. Параллельно с основным можно задать защиту с поддержкой режима «только просмотр». Под ним у вошедшего не получится контролировать удаленную клавиатуру и мышку, зато легко выйдет продемонстрировать работу специалиста.
После ввода обоих паролей утилита самостоятельно сгенерирует файл конфигурации:
Would you like to enter a view-only password (y/n)? n
xauth: file /home/username/.Xauthority does not exist
New 'X' desktop is your_hostname:1
Creating default startup script /home/username/.vnc/xstartup
Starting applications specified in /home/username/.vnc/xstartup
Log file is /home/username/.vnc/your_hostname:1.log
Владельцу нужно задать такие настройки, чтобы VNC Server на Debian «понимал», какие команды требуется выполнить на старте – например, указать рабочий стол, который понадобится сразу при активации соединения. Перечень таких «указаний» размещен в файле xstartup, расположенном в подкаталоге .vnc каталога home. Вариант startup создается при первоначальном старте vncserver.
Но мы внесем в конфигурацию отдельный сценарий, включающий старт интерфейса с графикой Xfce. Важно учитывать, что с заводскими настройками VNC общается с удаленными хостами через порт 5901. Его так и называют – порт дисплея, для программы он является «номером 1». Последнее позволяет запуск нескольких экземпляров под номерами 2, 3 и т.д.
Перед настройкой VNC в Debian 10 требуется остановить ее командой:
vncserver -kill :1
На экране пользователь наблюдает такой пост:
Killing Xtightvnc process ID 17648
Также желательно создать бэкап первоначального файла, чтобы быстро откатить настройки при ошибке управления:
mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
Теперь можно сгенерировать новый файл xstartup и редактировать его в штатном приложении:
nano ~/.vnc/xstartup
Все команды, внесенные в него, автоматически выполнятся при старте VNC вместе с системой или при рестарте самой утилиты. Внесем сначала задачу запуска среды рабочего стола:
~/.vnc/xstartup
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
Строка с наименованием Xresources – это имя сервера, на котором требуется запустить утилиту xrdb. Внутри одноименного файла можно указать цвет терминала, тему курсора, тип рендеринга шрифта и другие параметры, определяющие внешний вид и удобство пользования Рабочим столом. Вторая строка – непосредственно команда запуска программы для управления сервером.
После изменения конфигурационного файла его нужно сделать исполняемым:
sudo chmod +x ~/.vnc/xstartup
Все, настройка VNC Server завершена, остается принудительно перезапустить его.
Vncserver
На экране пользователь увидит:
New 'X' desktop is your_hostname:1
Starting applications specified in /home/username/.vnc/xstartup
Log file is /home/username/.vnc/your_hostname:1.log
Программа TightVNC по умолчанию активирует соединение без поддержки шифрования. Но для нашего эксперимента требуется безопасный тоннель по стандарту SSH. Для этого на рабочем месте нужно создать соответствующее соединение, перенаправляющее информацию в localhost для обработки утилитой VNC.
Выполнить задачу можно командой в терминале (Linux или macOS):
ssh -L 5901:127.0.0.1:5901 -C -N -l user your_server_ip
Здесь опция -L обозначает наличие закрепления портов. Если не менять заводские настройки, речь идет о номерах 5901 на обоих хостах (удаленном и локальном). Опция -C позволяет сжимать данные перед их отправкой на сервер и обратно. Символ -N нужен, чтобы указать протоколу SSH, что мы не собираемся выполнять удаленные команды, а -l задает наименование хоста, к которому нужно подключаться для удаленного управления.
В приведенной команде требуется заменить слова user и server_ip на имя пользователя root без привилегий и реальный IP-адрес удаленного хоста. На рабочих местах часто устанавливают утилиту PuTTY – клиент SSH с привычным интерфейсом. В ней и указывают IP-адрес хоста, задают значение localhost:5901 в качестве нового порта для переадресации данных.
После активации соединения система предложит ввести пароль, заданный еще на первом шаге настройки. Туннель будет активирован только после успешной аутентификации входящего пользователя. И тот увидит графический интерфейс Xfce в том виде, в котором был задан в настройках .Xresources. Остается настроить Рабочий стол в меню «Использовать конфигурацию по умолчанию». Сеанс связи через SSH отключается нажатием комбинации клавиш <Ctrl+C>.
На завершающем этапе настроим VNC Server как системную службу Debian, чтобы запускать ее, останавливать и перезапускать по тому же принципу, что и остальные службы. Это гарантирует старт утилиты одновременно с запуском сервера. Откроем на редактирование файл настроек – /etc/system/system/vncserver@.service:
sudo nano /etc/systemd/system/vncserver@.service
Здесь символ @ нужен в качестве аргумента для изменения параметров службы. Его применяют, когда нужно указать порт дисплея VNC, используемого для работы с утилитой. В файл внесем такие строки (значение user, group, workingdirectory, username требуется заменить на собственные значения):
/etc/systemd/system/vncserver@.service
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target
[Service]
Type=forking
User=username
Group=username
WorkingDirectory=/home/username
PIDFile=/home/username/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
Команда ExecStartPre позволяет отключить сервер VNC, если тот активен. Заново запустить его можно командой ExecStart, одновременно будет установлено разрешение 1280х800 с 24-битным цветом. Теперь нужно применить изменения и указать системе о наличии другого файла.
sudo systemctl daemon-reload
Следом активируем этот файл:
sudo systemctl enable vncserver@1.service
Цифра 1, которая указана после @, означает номер дисплея, где требуется активация службы. Он всегда «первый», если не менялись первоначальные настройки, но пользователь может указать любой другой. Теперь отключим активную копию сервера VNC и запустим какую-либо иную службу:
vncserver -kill :1
sudo systemctl start vncserver@1
Проверить, работает ли сервер VNC, можно командой:
sudo systemctl status vncserver@1
Результат владелец увидит в таком виде:
vncserver@1.service - Start TightVNC server at startup
Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-09-05 16:47:40 UTC; 3s ago
Process: 4977 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS)
Process: 4971 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=0/SUCCESS)
Main PID: 4987 (Xtightvnc)
...
После проведенных манипуляций сервер станет доступным после перезапуска системы. Теперь повторно запустим канал связи через SSH:
ssh -L 5901:127.0.0.1:5901 -C -N -l username your_server_ip
Команда создаст подключение при помощи клиентского приложения, перекидывающего коннект по localhost:5901 на локальную машину.
Вот мы и завершили настройку и запуск защищенного сервера VNC на сервере с инсталлированной операционной системой Debian 10. Теперь можно выполнять любые привычные операции – запуск и установку/удаление программ, их настройку, управление файлами, серфинг в интернете и т.д.