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
[email protected]:~$

Решение: нужно «пробросить» 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> ещё)
Имя (обязательно, 50 символов или меньше)
Опциональный email, на который получать ответы (не будет опубликован)
Веб-сайт
© 2006—2019 Sergey Stolyarov | Работает на Pyrone