Virtual Network Computing или VNC — это система подключения, позволяющая использовать клавиатуру и мышь для взаимодействия с графической средой рабочего стола на удаленном сервере. Данная система упрощает управление файлами, программным обеспечением и настройками на удаленном сервере для пользователей, которые еще не очень знакомы с управлением через командную строку.
Из этого руководства вы узнаете, как настраивать сервер VNC на сервере Ubuntu 18.04 и безопасно подключаться к нему через туннель SSH. Мы будем использовать TightVNC, быстрый и компактный пакет дистанционного управления. Благодаря этому наше соединение VNC будет стабильным и удобным даже при низкой скорости подключения к интернету.
Для завершения данного обучающего модуля вам потребуется:
По умолчанию сервер Ubuntu 18.04 поставляется без графической среды рабочего стола и без сервера VNC, так что для начала мы их установим. В частности, мы установим пакеты новейшей среды рабочего стола Xfce и пакет TightVNC, доступный в официальном хранилище Ubuntu.
Обновите список пакетов на своем сервере:
- sudo apt update
Установите на свой сервер среду рабочего стола Xfce:
- sudo apt install xfce4 xfce4-goodies
После завершения установки установите сервер TightVNC:
- sudo apt install tightvncserver
Для завершения начальной настройки сервера VNC после установки используйте команду vncserver
, чтобы задать безопасный пароль и создать начальные файлы конфигурации:
- vncserver
Вам будет предложено ввести и подтвердить пароль для удаленного доступа к системе:
OutputYou will require a password to access your desktops.
Password:
Verify:
Пароль должен иметь длину от 6 до 8 символов. Пароли длиной более 8 символов будут автоматически обрезаны.
После подтверждения пароля вы сможете создать пароль только для просмотра. Пользователи, входящие с паролем только для просмотра, не смогут контролировать экземпляр сервера VNC с помощью мыши или клавиатуры. Это полезная возможность, если вам нужно что-то продемонстрировать с помощью сервера VNC, однако использовать ее необязательно.
Затем процесс создает необходимые файлы конфигурации по умолчанию и данные подключения для сервера:
OutputWould you like to enter a view-only password (y/n)? n
xauth: file /home/sammy/.Xauthority does not exist
New 'X' desktop is your_hostname:1
Creating default startup script /home/sammy/.vnc/xstartup
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log
Теперь настроим сервер VNC.
Сервер VNC должен знать, какие команды следует выполнять при запуске. В частности, VNC должен знать, к какому графическому рабочему столу следует подключиться.
Эти команды находятся в файле конфигурации xstartup
в папке .vnc
в каталоге home. Сценарий startup был создан при запуске vncserver
на предыдущем шаге, однако мы создадим собственный сценарий для запуска рабочего стола Xfce.
При начальной настройке VNC запускается экземпляр сервера по умолчанию на порту 5901
. Этот порт называется портом дисплея и учитывается VNC как :1
. Возможен запуск нескольких экземпляров VNC на других портах дисплея, в том числе :2
, :3
и т. д.
Поскольку мы изменяем настройку сервера VNC, вначале нужно остановить экземпляр сервера VNC, работающий на порту 5901
, с помощью следующей команды:
- vncserver -kill :1
Результат должен выглядеть следующим образом, хотя вы увидите другой PID:
OutputKilling Xtightvnc process ID 17648
Прежде чем изменять файл xstartup
, следует создать резервную копию исходного файла:
- mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
Создайте новый файл xstartup
и откройте его в текстовом редакторе:
- nano ~/.vnc/xstartup
Команды из этого файла автоматически выполняются при запуске или перезапуске сервера VNC. Сервер VNC должен запустить нашу среду рабочего стола, если она еще не запущена. Добавьте в файл следующие команды:
~/.vnc/xstartup#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
Первая команда в файле, xrdb $HOME/. Xresources
указывает системе графического интерфейса VNC прочитать файл пользователя сервера .
Файл Xresources
. В файле Xresources пользователь может изменять определенные параметры графического рабочего стола, такие как цвета терминала, темы курсора и рендеринг шрифтов. Вторая команда указывает серверу запустить пакет Xfce, включающий все графическое программное обеспечение для удобного управления сервером.
Чтобы сервер VNC мог использовать новый файл startup, нужно сделать его исполняемым.
- sudo chmod +x ~/.vnc/xstartup
Перезапустите сервер VNC.
- vncserver
Результат будет выглядеть примерно так:
OutputNew 'X' desktop is your_hostname:1
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log
Завершив настройку, подключимся к серверу с локального компьютера.
Сервер VNC не использует защищенные протоколы при подключении. Мы используем туннель SSH для безопасного подключения к серверу, а затем укажем клиенту VNC использовать этот туннель, а не создавать прямое соединение.
Создайте на локальном компьютере соединение SSH, которое безопасно перенаправляется в соединение localhost
для VNC. Для этого можно ввести черех терминал в Linux или macOS следующую команду:
- ssh -L 5901:127.0.0.1:5901 -C -N -l sammy your_server_ip
Опция -L
указывает на привязку портов. В данном случае мы привязываем порт 5901
удаленного подключения к порту 5901
локального компьютера. Опция -C
активирует сжатие, а опция -N
указывает ssh
, что мы не хотим выполнять удаленную команду. Опция -l
указывает имя для удаленного входа в систему.
Не забудьте заменить sammy
и your_server_ip
именем пользователя sudo без привилегий root и IP-адресом вашего сервера.
Если вы используете графический клиент SSH (например, PuTTY), используйте your_server_ip
как IP-адрес для подключения, и задайте localhost:5901
как новый порт переадресации в настройках туннеля SSH программы.
После запуска туннеля используйте клиент VNC для подключения к localhost:5901
. Вам будет предложено пройти аутентификацию, используя пароль, заданный на шаге 1.
После подключения вы увидите рабочий стол Xfce по умолчанию. Он должен выглядеть следующим образом:
Для доступа к файлам в каталоге home вы можете использовать менеджер файлов или командную строку, как показано здесь:
Нажмите CTRL+C
в терминале, чтобы остановить туннель SSH и вернуться к командной строке. При этом сеанс VNC также будет отключен.
Теперь настроим сервер VNC как службу.
Далее мы настроим сервер VNC как системную службу, которую мы сможем запускать, останавливать и перезапускать как любую другую службу. Это также обеспечит запуск VNC при перезагрузке вашего сервера.
Создайте новый файл блока с именем /etc/systemd/system/vncserver@.service в своем
любимом текстовом редакторе:
- sudo nano /etc/systemd/system/vncserver@.service
Символ @
позволит нам передать аргумент, который мы сможем использовать при настройке службы. Мы будем использовать его, чтобы задать порт дисплея VNC, который хотим использовать при управлении службой.
Добавьте в файл следующие строки. Оюязательно измените значения параметров User, Group, WorkingDirectory и username на значения PIDFILE, соответствующие вашему имени пользователя:
/etc/systemd/system/vncserver@.service[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target
[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy
PIDFile=/home/sammy/.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
запускает VNC и устанавливает 24-битную глубину цвета с разрешением 1280x800. Вы можете изменить эти параметры запуска в соответствии со своими потребностями.
Сохраните и закройте файл.
Затем сообщите системе о новом файле блока.
- sudo systemctl daemon-reload
Активируйте файл блока.
- sudo systemctl enable vncserver@1.service
Цифра 1
после символа @ указывает, на каком дисплее должна появляться служба. В данном случае это значение по умолчанию :1
, как говорилось на шаге 2.
Остановите текущий экземпляр сервера VNC, если он еще работает.
- vncserver -kill :1
Запустите его, как любую другую системную службу.
- sudo systemctl start vncserver@1
Вы можете проверить запуск с помощью следующей команды:
- sudo systemctl status vncserver@1
Если запуск выполнен нормально, результат должен выглядеть следующим образом:
Output● vncserver@1.service - Start TightVNC server at startup
Loaded: loaded (/etc/systemd/system/vncserver@.service; indirect; vendor preset: enabled)
Active: active (running) since Mon 2018-07-09 18:13:53 UTC; 2min 14s ago
Process: 22322 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS)
Process: 22316 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=0/SUCCESS)
Main PID: 22330 (Xtightvnc)
...
Теперь сервер VNC будет доступен при перезагрузке компьютера.
Запустите туннель SSH еще раз:
- ssh -L 5901:127.0.0.1:5901 -C -N -l sammy your_server_ip
Создайте новое подключение, используя клиентское программное обеспечение VNC для подключения localhost:5901
к вашему компьютеру.
Вы установили и запустили защищенный сервер VNC на своем сервере Ubuntu 18.04. Теперь вы сможете управлять файлами, программным обеспечением и настройками через удобный и знакомый графический интерфейс, а также удаленно запускать графические приложения, в том числе браузеры.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!