Dormestmass: Админ — это состояние души

Запускаем VNC на :0 display

Несколько дней назад, будучи вдалеке от дома, понадобилось мне переслать одно письмецо с домашнего компа. Проблема была в том, что я не пользуюсь консольными MUA (да простят меня адепты mutt и pine). Доступ к компутеру есть, но только по ssh. Вот и захотелось организовать себе доступ к графическим рюшекам.

Погуглив немного и почесав затылок, решил что для моих целей как нельзя лучше подходит протокол VNC. Или, говоря по честному, я просто не нашел ничего более преемлимого. Сюрпризом оказалось то, что большинство VNC-серверов запускают для удаленных клиентов ещё один Х-сервер на :1, что мне категорически не понравилось. Но есть и серверы, которые могут работать с дефолтным :0. Это — realvnc и x11vnc.

C первым решил не связыватся, т.к. для запуска на :0 нужно его подгружать в качесте модуля для XOrg. Этот путь не для нас.

Второй оказался куда более гибким в этом отношении. О нем и пойдет речь.

Пролистал 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. Поздравляю всех с Днем системного администратора!

Популярность: 13%

  • Спасибо за интересную статью! Возьму на заметку :-)

  • You are welcome :)

  • Интересная статья. Но я отказался от vnc по причине поедания полосы -- удалённый доступ нужен как правило «в поле», а меги на 3G модеме не бесконечные.

    Есть чуть более изящный способ запуска любимых графических рюшечек:

    Все графичиеские рюшики - это иксы (Х11) и выполнятся они могут на любом Х-сервере, в том числе и удалённо.

    Рецепт прост:

    1. ставим на удалённый комп/ноут Х11 сервер. Мой выбор - Хming.

    — По большому счёту что vnc-клиент, что х-сервер всё равно ставить... Правда плюс vnc — возможность работы через браузер — но это уже другая тема.

    2. В любимом PuTTy разрешаем туннелирование Х11 трафика (галочка «enable X11 forwarding» в настройках Сonnection-SSH-X11 ).

    В не менее любимой консоли добиваем -Х или -Y к параметрам подключения по ssh — это зависит от системы, но как правило работает и то и другое.

    $ ssh -X host

    3. после таких действий запускаем любую графическую приблуду так:

    $ firefox &&

    && — загонят процес в фон и освободят консоль для ввода новых команд.

Вы можете следить за обсуждением с помощью RSS 2.0 ленты.