Запускаем VNC на :0 display
Несколько дней назад, будучи вдалеке от дома, понадобилось мне переслать одно письмецо с домашнего компа. Проблема была в том, что я не пользуюсь консольными MUA (да простят меня адепты mutt и pine). Доступ к компутеру есть, но только по ssh. Вот и захотелось организовать себе доступ к графическим рюшекам.
Погуглив немного и почесав затылок, решил что для моих целей как нельзя лучше подходит протокол VNC. Или, говоря по честному, я просто не нашел ничего более преемлимого. Сюрпризом оказалось то, что большинство VNC-серверов запускают для удаленных клиентов ещё один Х-сервер на :1, что мне категорически не понравилось. Но есть и серверы, которые могут работать с дефолтным :0. Это — realvnc и x11vnc.
C первым решил не связыватся, т.к. для запуска на :0 нужно его подгружать в качесте . Этот путь не для нас.
Второй оказался куда более гибким в этом отношении. О нем и пойдет речь.
Пролистал man, я нашел чудестную опцию -inetd, которой и решил воспользоваться. Плюсы такого подхода: сервер стартует только по требованию, не отжирая системные ресурсы, и возможность некого контроля входящих соединений средствами inetd.
Вот небольшой рецепт по запуску x11vnc.
Добавляем наш сервис в /etc/services.
desktop$ sudo echo "vnc 5900/tcp" >> /etc/services
Конфигурируем inetd (я использую xinetd):
desktop$ cat /etc/xinetd.d/x11vnc service vnc { disable = no socket_type = stream protocol = tcp wait = no user = ronix instances = 1 server = /usr/bin/x11vnc server_args = -display :0 -inetd -q -passwdfile /home/ronix/.vnc/passwdfile only_from = 127.0.0.1 log_type = SYSLOG auth notice }
Как вы видите, сервис доступен только с адреса локалхоста. Попытаюсь объяснить зачем это сделано. Как известно, VNC имеет большую проблему с security в виде максимальной длины пароля в 8-символов, что не есть хорошо. Так что оставить его открытым всему миру будет большой ошибкой. Собственно говоря, ограничить доступ можно и с помощью пакетного фильтра, но это не всегда удобно или уместно. Второй путь — запустить сервис на 127.0.0.1. Вы спросите, а как же я с удаленного хоста попаду на этот 127.0.0.1 ? Все очень просто. Достаточно воспользоватся возможностью туннелирования трафика в ssh. Это и вызовет увеличение безопасности, ведь перед тем, как подключится к VNC, вам придется ещё дополнительно аутентифицироватся в системе.
Осталась самая малость. Создать файл с паролем /home/ronix/.vnc/passwdfile и перезапустить xinetd.
Подключение к VNC серверу выполняется в два этапа. Подключение к ssh с созданием тунеля:
remotehost$ ssh -C -L5900:127.0.0.1:5900 ronix@desktop.domain.com
И, собственно, подключение к VNC-серверу:
remotehost$ vncviewer localhost
P.S. Поздравляю всех с Днем системного администратора!
Популярность: 17%
Roman Shramko