Expertus metuit
Xorg, ssh и sudo
Опубликовано 2013-02-22 в 11:29

Типичная ситуация: коннектимся с машины M1 на машину M2 через SSH, затем на машине M2 меняем юзера через sudo и хотим там запустить X11-приложение, чтобы оно открылось на дисплее машины M1. Это может быть, например, отладчик или графическая гуйня к базе.

Дальше я по шагам распишу все этапы подключения с комментариями.

Сначала соединяемся с машиной M2 (server-M2.example.com) с включённым X11-форвардингом и логином ubuntu:

Ключик -X включает X11-форвардинг, после соединения на стороне машины M2 автоматически делается несколько вещей, чтобы заработал форвардинг:

  • в переменную окружения DISPLAY прописывается строка вида localhost:10.0;
  • в домашнем каталоге юзера создаётся файл .Xauthority с секретной строкой для авторизации X11-подключений (чуть подробнее об этом можно тут, например, прочитать).

Теперь из этой сессии можно запустить X11-приложение и оно откроется на дисплее машины M1.

Следующий шаг — смена юзера на devuser через команду sudo -u devuser -i, она открывает полноценный shell, но уже принадлежащий полностью юзеру devuser. И вот уже здесь X11-приложения запускаться не будут:

$ xterm 
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
xterm Xt error: Can't open display: localhost:10.0
devuser@ubuntu:~$

Решение: нужно «пробросить» X11-куку в sudo-сессию, быстрее всего это сделать вот таким шаманством:

$ sudo -u devuser -i xauth add $(xauth list | xargs -n 3) && sudo -u devuser -i

В этой команде делается простое:

  • берём авторизационную куку из текущей сессии ( $(xauth list | xargs -n 3) );
  • добавляём её в файл с куками для юзера devuser (xauth add ...);
  • запускаем интерактивную сессию для юзера через sudo.

Комментарии

Текст комментария (допустимая разметка: *курсив*, **полужирная**, [ссылка](http://example.com) или <http://example.com>) Посетители-анонимы, обратите внимение, что более чем одна гиперссылка в тексте (включая оную из поля «веб-сайт») приведёт к блокировке комментария для модерации. Зайдите на сайта с использованием аккаунта на twitter, например, чтобы посылать комментарии без этого ограничения.
Имя (обязательно, 50 символов или меньше)
Опциональный email, на который получать ответы (не будет опубликован)
Веб-сайт
© 2006—2024 Sergey Stolyarov | Работает на pyrengine