Некаторыя карыстачы арандуюць адносна недарагія VPS з Windows для запуску сэрвісу выдаленых працоўных сталоў. Тое ж самае можна зрабіць і на Linux без размяшчэння ў датацэнтры ўласнага жалеза ці арэнды выдзеленага сервера. Камусьці патрэбна звыклае графічнае асяроддзе для тэстаў і распрацоўкі або выдалены дэсктоп з шырокім каналам для працы з мабільных прылад. Ёсць маса варыянтаў ужывання заснаванай на пратаколе Remote FrameBuffer (RFB) сістэмы Virtual Network Computing (VNC). У невялікім артыкуле мы раскажам, як наладзіць яе на віртуальнай машыне з любым гіпервізарам.
змест:
Выбар сервера VNC
Сэрвіс VNC можа быць убудаваны ў сістэму віртуалізацыі, пры гэтым гіпервізор звяжа яго з эмуляванымі прыладамі і ніякай дадатковай налады не запатрабуецца. Гэты варыянт мяркуе значныя накладныя выдаткі і падтрымліваецца далёка не ўсімі правайдэрамі – нават у менш рэсурсаёмістай рэалізацыі, калі замест эмуляцыі рэальнай графічнай прылады віртуальнай машыне перадаецца спрошчаная абстракцыя (фрэймбуфер). Часам VNC-сервер прывязваецца да які працуе X-серверу, але гэты спосаб больш падыходзіць для доступу да фізічнай машыны, а на віртуальнай ён стварае шэраг тэхнічных складанасцяў. Прасцей за ўсё ўсталяваць VNC-сервер са ўбудаваным X-серверам. Ён не патрабуе наяўнасці фізічных прылад (відэаадптара, клавіятуры і мышы) або іх эмуляцыі з дапамогай гіпервізара, а таму падыходзіць для VPS любога тыпу.
Ўстаноўка і настройка
Нам спатрэбіцца віртуальная машына з Ubuntu Server 18.04 LTS у канфігурацыі па змаўчанні. У стандартных рэпазітарах гэтага дыстрыбутыва ёсць некалькі сервераў VNC:
Устаноўка асяроддзя рабочага стала з усімі залежнасцямі выконваецца наступнай камандай:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
Далей неабходна ўсталеўваць сервер VNC:
sudo apt-get install tigervnc-standalone-server tigervnc-common
Запускаць яго з правамі суперкарыстальніка - дрэнная ідэя. Ствараем карыстальніка і групу:
sudo adduser vnc
Дадамо карыстальніка ў групу sudo, каб ён мог вырашаць злучаныя з адміністраваннем задачы. Калі такой патрэбнасці няма, гэты крок можна прапусціць:
sudo gpasswd -a vnc sudo
На наступным кроку трэба запусціць сервер VNC з прывілеямі карыстача vnc, каб стварыць бяспечны пароль і канфігурацыйныя файлы ў каталогу ~/.vnc/. Даўжыня пароля можа быць ад 6 да 8 сімвалаў (лішнія абразаюцца). Пры неабходнасці таксама задаецца пароль толькі для прагляду, г.зн. без доступу да клавіятуры і мышы. Наступныя каманды выконваюцца ад імя карыстальніка vnc:
su - vnc
vncserver -localhost no
Па змаўчанні пратакол RFB выкарыстоўвае дыяпазон TCP-партоў ад 5900 да 5906 – гэта т.зв. парты дысплея, кожны з якіх адпавядае экрану X-сервера. Пры гэтым порты асацыяваныя з экранамі ад :0 па :6. Запушчаны намі асобнік сервера VNC слухае порт 5901 (экран: 1). Іншыя асобнікі могуць працаваць на іншых партах з экранамі :2, :3 і т. д. Перад далейшай наладай трэба спыніць сервер:
vncserver -kill :1
Каманда павінна вывесці прыкладна такое паведамленне: 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 у хатнім каталогу. Там карыстач можа вызначыць розныя параметры графічнага працоўнага стала: рэндэрынг шрыфтоў, колеры тэрмінала, тэмы курсора і г.д. Сцэнар неабходна зрабіць выкананым:
chmod 755 ~/.vnc/xstartup
На гэтым настройка сервера VNC завершана. Калі запусціць яго камандай vncserver -localhost no (ад імя карыстальніка vnc), можна будзе падключыцца з зададзеным раней паролем і ўбачыць такую карціну:
Запуск службы праз systemd
Ручны запуск сервера VNC дрэнна падыходзіць для баявога прымянення, таму мы наладзім сістэмную службу. Каманды выконваюцца ад імя root (выкарыстоўваем sudo). Для пачатку ствараем новы юніт-файл для нашага сервера:
sudo nano /etc/systemd/system/[email protected]
Сімвал @ у імені дазваляе перадаваць аргумент для наладкі службы. У нашым выпадку ён задае порт дысплея 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 [email protected]
Лічба 1 у імені задае нумар экрана.
Спыняем сервер VNC, запускаем яго як службу і правяраем статут:
# от имени пользователя vnc
vncserver -kill :1
# с привилегиями суперпользователя
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1
Калі служба працуе, мы мусім атрымаць прыкладна такі вынік.
Падлучэнне да працоўнага стала
Наша канфігурацыя не выкарыстоўвае шыфраванне, таму сеткавыя пакеты могуць быць перахоплены зламыснікамі. Да таго ж у VNC-серверах досыць часта
sudo netstat -ap |more
У 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-сервер створыць новы экран і пачне сесію. Для аўтэнтыфікацыі ўсярэдзіне яе можна выкарыстоўваць графічны дысплейны мэнэджар (напрыклад,
Крыніца: habr.com