Debian.pro

Блог для пользователей и администраторов Debian


Организуем себе безопасное рабочее место на удаленной виртуалке при помощи x2go.

Достаточно давно я наткнулся на крайне интересную вещь — x2go.
По сути своей, это очередной способ поиметь себе remote desktop с linux-машины. Вот только в этот раз — способ достаточно шустрый, быстрый, работающий. А в нашем случае полезно ещё и то, что он туннелирует из коробки весь трафик через ssh.
В игры поиграть не получится, само собой, но вот Youtube я через него вполне себе смотрел )

Из приятных вкусностей — передача звука, принтеров, ресайз окна (если не используется родной системный X-сервер), наличие толкового клиента под windows, авторизация по ssh-ключам, возможность отключиться от сессии и оставить там всё запущенным. Традиционно, под виндой работает не всё (в частности, не удалось пошарить каталог и принтер), но в целом впечатления положительные. Можно комфортно работать на удаленном сервере в Голландии с машины в России.

Зачем это нужно, рассказывать, думаю, не нужно. Скажем так, для запуска Firefox с ботом для браузерной игры. Или для оплаты кредитками из недоверенной сети.

Собственно, покупаем любую виртуалку/делаем её сами в нормальной стране. Помним, что для нормальной работы Firefox/Iceweasel нужно от гигабайта RAM (иначе оно по OOM падать будет). Логинимся на неё по ssh, начинаем развлекаться.

Мануал актуален для текущих версий Ubuntu/Debian (debian 7+, ubuntu 12.04+) — соответственно, нужна виртуалка с ними. На OpenVZ из-за модуля ядра работать не будет, скорее всего.

Для начала создадим пользователя, под которым мы в дальнейшем будем использовать x2go:

root@server:~# adduser username

По ходу дела у нас спросят 2 раза пароль, вводим какой-нибудь достаточно сложный. Остальное можно оставлять пустым.

Далее мы зашифруем домашний каталог пользователя. Ставим нужный софт:

root@server:~# apt-get update; apt-get install ecryptfs-utils

Подгружаем модуль ядра для шифрования:

root@server:~# modprobe ecryptfs

Чтобы он загружался при загрузке системы в файл /etc/modules нужно добавить строку:

ecryptfs

Шифруем домашний каталог пользователя:

root@server:~# ecryptfs-migrate-home -u username

Проверяем, что оно зашифровалось:

root@server:~# ls /home/username
Access-Your-Private-Data.desktop README.txt

Логинимся нашим пользователем по ssh, проверяем, что он может корректно работать со своим домашним каталогом:

username@server:~$ touch ~/testfile; ls ~; rm ~/testfile; ls ~

Если всё работает нормально, то запускаем команду:

username@server:~$ ecryptfs-unwrap-passphrase

В ответ вам выдадут ключ, при помощи которого можно будет восстановить зашифрованные данные, если забудете основной пароль. Мне, в общем-то, ни разу не пригодилась =) Но если вы её решите записать — сделайте это на бумажку, которую будете хранить дома в столе без всяких комментариев на ней.

Помните, что файлы в домашнем каталоге будут доступны для чтения всем пользователям (особенно, руту), когда ваш пользователь залогинен в системе. Поэтому, если у вас есть причина шифровать домашний каталог — то делайте это всё же на виртуалке, к которой никто не имеет доступа кроме вас. К тому же, если вы положите в зашифрованный домашний каталог файлы (например, сайта), а потом выйдете из системы — то эти файлы перестанут быть доступны.

Ну, собственно, можно начинать ставить x2go. Сначала настраиваем сервер. Для начала напишу про Debian Wheezy. Создаём файл /etc/apt/sources.list.d/x2go.list с таким содержимым:

deb http://packages.x2go.org/debian wheezy main

Добавляем ключ репозитория в систему:

root@server:~# apt-key adv --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E; apt-get update

Для убунты. Добавляем ppa x2go в систему:

root@server:~# apt-get update; apt-get install python-software-properties; add-apt-repository ppa:x2go/stable; apt-get update

Ставим нужный софт для запуска удаленного рабочего стола. Я буду ставить xfce (он вполне неплохо работает удаленно), если у вас много экспы — ставьте что угодно. Главное, не Unity и не KDE (тормозит-с, ибо им видюха полноценная нужна).

root@server:~# apt-get install x2goserver xfce4 xfce4-xkb-plugin

Для убунту лучше сразу сделать так:

root@server:~# apt-get install x2goserver xubuntu-desktop

Ещё раз повторюсь, что ставить всё это на сервер, где крутится ещё что-то крайне не рекомендуется. Покушает много места и памяти.

В общем-то, сервер на этом готов. Ну можно поставить туда ещё firefox/iceweasel, если уже нет. Или jabber-клиент. Или skype-клиент (правда, голосом общаться не получится, наверное). Дальше ставим/настраиваем клиент.
Для винды нужно просто пойти сюда и ткнуть там ссылку «mswin», потом поставить клиент.
Для убунты 12.04+ и Debian 7+ можно воспользоваться командой (это уже на десктопе, если кто не понял):

root@server:~# apt-get install x2goclient

Правда, из репозиториев приезжает достаточно старая версия (хотя и работающая), поэтому я рекомендую повторить на десктопе те же шаги, которые вы делали на сервере (создать файл /etc/apt/sources.list.d/x2go.list и так далее), только ставить один x2goclient, а не x2goserver.

Так же нужно знать, что на linux-ах x2goclient приносит за собой и запускает openssh-server. Он нужен для работы x2go-клиента, но ему не нужно слушать внешние интерфейсы (а в таком случае ssh-сервер будет недоступен всем остальным, кроме вас). Поэтому, перевесим его на localhost:

root@server:~# sed 's/.*ListenAddress.*/ListenAddress 127.0.0.1/g' /etc/ssh/sshd_config
root@server:~# /etc/init.d/ssh restart

Теперь можно смело запускать x2go-клиент. В нём топаем в менюшку Session -> New Session.
Меняем значок на клевую картинку, создаём сессию для подключения.
В поле Host пишем ip-адрес или dns-имя нашего сервера.
В поле Пользователь — имя пользователя, которого мы создавали (и которому шифровали папку).
SSH порт — 22 стандартный, если меняли — сами знаете, что написать)
Если вы знаете про ssh-ключи, то я сильно рекомендую использовать для авторизации в x2go именно ключи (впрочем, пароль там сохранить негде, так что его не сопрут. Разве что кейлоггерами).
Тип сессии — XFCE, если вы ставили xfce. Если что-то другое — сами выберите нужное ;)
Далее переходим во вкладку Соединение. Там выбираем ADSL, метод сжатия 16m-jpeg, Качество — 9.
Во вкладке «Установки» выключаем звук и принтер (звук на арендованных виртуалках работать не будет, скорее всего), если они не нужны.
Экспорт каталогов — по вкусу.

Усё, жмем подключиться, вводим пароль от пользователя/ключа, наслаждаемся. Если просто закрыть окно x2go — то сессия останется висеть в фоне. Если явно нажать выход в XFCE — то сессия завершится. Только не забывайте, что если вы не завершите сессию, то файлы в домашнем каталоге останутся незашифрованными для рута.

После первого логина в XFCE нужно добавить несколько апплетов на панель (пкм по панели -> Panel -> add new item). Нужно добавить Actions buttons (чтобы можно было делать logout), и Keyboard layouts. В настройках последнего нужно будет настроить клавиши для переключения раскладки и добавить вторую раскладку, если нужна.

Ещё полезная фича для хомяков — запуск отдельного приложения по x2go. Выбираем тип сессии «Приложение», Команду/исполняемый файл и логинимся. Такие приложения выглядят под убунтой достаточно нативно (особенно если настроить внешний вид на стороне сервера), вот только при запуске браузера таким способом у меня иксы упали =) Остальное запустилось нормально.


Комментарии (30):

  1. bosha :

    Оно работает шустрее чем, скажем, x11vnc?

  2. Влад :

    Да, конечно.
    Иначе зачем мне бы про неё писать)

  3. bosha :

    Попробуем-с тогда. А то x11vnc не очень шустрый, достал уже :)

  4. Давай) Отпишись потом сюды, как оно тебе.
    Ну и качество покрути, если медленно будет.

  5. С freenx по скорости не сравнивали? Судя по сообщению на сайте технологии похожие.

  6. А это и есть примерно одно и то же, только X2Go с человеческим лицом сделан. Ну и ключи меня покорили у него, конечно.
    Есть правда разница в районе того, что во FreeNX с 2008-го года никто ничего не коммитил, а технологию ещё пилить и пилить.

  7. Ок, надо глянуть будет. Меня в принципе freenx устраивает по скорости, все равно проблема комфортной удаленки упирается в отсутсвие нормальной 3d акселерации на kvm виртуализации, поэтому java приложения и тот же хром подтормаживают

  8. ksenofor :

    xpra есть еще — вроде бы аналог, с простыми командами.
    https://wiki.archlinux.org/index.php/Xpra

  9. Вот только очень медленная и глючная эта xpra, пробовал я её)

  10. Джанго :

    Автор стать напиши на почту на пожалуйста

  11. Джанго :

    Ато не понимаю, как запустить отдельно программу и как запустить и можно ли одновременно делать несколько сессий с одного ПК ? И почему в windows client не варианта xfce ?

  12. DeMoz :

    Это говно требует бэкконекта на клиенте. А у меня нет прав на запуск серверов на клиенте. Почему нельзя обойтись одним исходящим соединением?

  13. Ну не нравится, не используйте, в чём проблема?

  14. dimti :

    Использую x2go уже несколько месяцев. Впечатления положительные. Однако, как выяснилось, сессии x2go не очень надежные. Они могут «замораживаться», «прерываться» и «выключаться» без видимых на то причин.
    Поэтому, чтобы обезопасить себя от внезапных падений, я открываю некоторые программы в сессии xpra.
    Это позволяет избежать нежелательного закрытия программ и присоединять их заново к сессии x2go.

    Этот путь имеет свои недостатки. Два недостатка:
    - буфер обмена, при использовании java-приложений работает некорректно (http://xpra.org/trac/ticket/735 — смотреть последние комментарии).
    - xpra работает медленно. Это вызывает некоторое неудобство при использование приложений которые запущены в сессии xpra.

    При использовании java-приложений в сессии x2go — наблюдается эффекты неправильного рендеринга графического интерфейса этих приложений (серые блоки, частичная прорисовка, отсутствие букв в словах). Так же, из-за использования java-приложений, сессия x2go имеет привычку «замораживаться» и не всегда она восстанавливается. На дню — раз 10-15 сессия падает, зависает и по-разному бывает, иногда сразу восстанавливается иногда не может соединится с x2go-сервером.

    Вот список баг-репортов на эту тему:
    https://www.mail-archive.com/x2go-dev@lists.x2go.org/msg01205.html
    http://bugs.x2go.org/cgi-bin/bugreport.cgi?bug=653
    http://bugs.x2go.org/cgi-bin/bugreport.cgi?bug=655

    ps: Если кто-то сталкивался с подобной проблемой и знает как её решить, пожалуйста, дайте знать!

  15. dimti :

    Смежный баг-репорт на тему проблем x2go и java-приложений:
    http://bugs.x2go.org/cgi-bin/bugreport.cgi?bug=291

    В самом конце Vysserk3 рекомендует вписать такую строку в конфиг запуска eclipse (насколько я понял идет речь о проблеме x2go и eclipse):
    -Dorg.eclipse.swt.internal.gtk.cairoGraphics=false

    Может это и есть решение? Кто ни будь понимает что это? Как эту строчку перенести на другие java-приложения (В моем случае: PHPStorm)

  16. Странно, я x2go использую, чтобы по ipmi-ям шастать, вроде всё нормально.

  17. dimti :

    Да у меня тоже нормально, если не включать java-приложение, а именно PHPStorm. Может что-то в vmoptions поменять?
    Сейчас попробовал обновить phpstorm. Может это что-то даст.

  18. Дмитрий :

    Всем привет. Использую x2go с awesome wm, при подключении к сессии не работает клавиша win, кто с таким сталкивался?

  19. Что значит «не работает»?
    Биндинги-то правильные?

    Правильный способ диагностики — запустить xev, навести мышу в новое окошко и потыкать winkey. Нужно посмотреть — передаётся ли xev-у keycode. Если не передаётся — проблема, вероятно, с настройкой модели клавиатуры (у меня вон валяется на столе без winkey) или действительно с самим x2go.
    Если передаётся — то нужно разбираться с биндингами.

  20. Дмитрий :

    2inkvizitor68sl, в awesome данная клавиша является основной в хоткеях. Проверяю по твоему способу, предварительно запустил setxkbmap -print -verbose 10 на локальном X, выдал модель клавиатуры pc104, указал ее в настройках сессии (проверил в x2go выдает ее).
    Дальше запускаю xev на локальном X, на данной клавише keykode 133, когда в x2go keykode 115 , глупый вопрос, но дальше как-быть? Спасибо.

  21. pc105/ru модель клавиатуры попробуйте
    115 — это > или <

  22. dimti :

    Добавлю еще ссылку на баг-репорт, связанный с проблемами x2go и java-приложениями jetbrains (Intellij IDEA, PhpStorm)
    http://bugs.x2go.org/cgi-bin/bugreport.cgi?bug=645

  23. Иван :

    Установил x2go на хubuntu-desktop 14.04
    возникла следующая проблема при подключении клиентом, пропадает раскладка клавиатуры, т.е. английская есть, а русской нет. кто-нибудь сталкивался, как решили?

  24. Вопрос: как установить x2go на телеприставку Aura HD?

  25. Вопрос — нахуа =)
    В целом — там древний линукс, пробовать собрать make-ом и поставить.

  26. «Девайса» подключена к многодюймовому телеку. Во время рекламы посмотреть что происходит на отдаленном компе — самое оно

  27. Итак, подробную инструкцию по сборке и установке x2go на Aura HD качаем с…
    ;)

  28. > Во время рекламы посмотреть что происходит на отдаленном компе
    Кажется, ты статью читал через зопу. x2go больше про виртуальные Х-ы, а не про то, что происходит на экране.

    > по сборке и установке x2go на Aura HD качаем с…
    Что-то мне лень, тем более что я её в глаза не видел и попробовать не смогу.

  29. Зря…
    Обращение ко всем другим читателям и участникам обсуждения. Если кто-нибудь знает или хотя бы представляет себе реальное решение задачи, пришлите, пожалуйста — с удовольствием ознакомлюсь.
    Заранее благодарен.

Написать комментарий