Что происходит в фоновом режиме при пересылке x11 через ssh?
Я пытаюсь ознакомиться с тем, что на самом деле происходит за кулисами, когда на моем хосте работает xServer, а затем я подключаюсь к другой машине с помощью ssh, например: ssh -Y user@machine
, В этом случае я буду использовать Cygwin в Windows, с моим DISPLAY
переменная окружения установлена в :0.0
и запустит приложение с графическим интерфейсом после подключения к удаленной машине, которое будет отображаться на моем хост-компьютере. Mac будет использовать Quartz для локального xServer (извините, если этот термин неверен, но, надеюсь, вы понимаете, что я имею в виду) и будет использовать ssh -X user@machine
вместо -Y
,
Цель здесь - создать контейнер Docker, который просто отвечает за установку и запуск приложения с графическим интерфейсом. Я бы запустил Docker-контейнер на моей хост-машине, и GUI-файл выскочил бы на хосте из целевой системы.
Я уже сделал эту работу через ssh и вручную запустил приложение GUI один раз в контейнере. Мне просто нужно знать, как настроить эту ванильную машину Linux (контейнер Docker) для пересылки графического интерфейса. Я думаю, понимая, что ssh -Y
Команда на самом деле делает, чтобы правильно настроить пересылку - это недостающий кусочек головоломки, который мне нужен. У меня есть смутное понимание существования .Xauthority
файл. Меня совершенно не волнует, насколько безопасно соединение. Я буду беспокоиться об этом после того, как заставлю его работать.
1 ответ
X приложение <-> X сервер
Во-первых, как X-приложение находит и подключается к X-серверу?
Приложение читает DISPLAY
переменная среды, чтобы узнать, как подключиться к X-серверу. Например значение :0
означает, что он должен подключиться к сокету Unix в /tmp/.X11-unix/X0
, значение hostname:5
значит подключиться к TCP порту 6005
компьютера hostname
,
X-сервер может быть настроен для запроса аутентификации у приложений. Как правило, когда X-сервер запускается как часть сеанса пользователя, cookie сохраняется в .Xauthority
файл в домашнем каталоге пользователя и доступен для чтения только пользователю. Отправляя файл cookie на X-сервер, приложение доказывает, что у него есть разрешение на чтение файлов пользователя, а также разрешение на просмотр его дисплея. (Файл может находиться по другому пути, заданному переменной среды XAUTHORITY
.)
пересылка по ssh
Когда вы SSH на сервер с -X
или же -Y
В этом случае ssh прочитает куки-файл аутентификации для вашего локального X-сервера и отправит его на ssh-сервер на удаленной стороне.
На удаленной стороне ssh создаст временный файл аутентификации с этим cookie и укажет XAUTHORITY
переменная к нему. Он начнет слушать на каком-то локальном порту (например, 6010
) и установите DISPLAY
переменная, чтобы указать на нее (например, localhost:10
). Если вы запустите какое-либо графическое приложение в этом сеансе, оно подключится к ssh (думая, что это X-сервер), который туннелирует его обратно на локальную сторону.
На локальной стороне ssh перенаправляет любое туннельное соединение на локальный X-сервер. (Что он нашел с помощью DISPLAY
переменная.)
Разница между -X
а также -Y
: Злонамеренный корень на удаленной машине может прочитать файл cookie из файла cookie и использовать его для подключения к вашему X-серверу. Если вы используете -X
ssh использует расширение безопасности X-сервера, чтобы запретить некоторые возможности приложения (например, делать скриншоты или захватывать клавиатуру). Но некоторые приложения могут нуждаться в них для работы, поэтому, если вы доверяете серверу, используйте -Y
,
альтернатива
Кстати, если сеть полностью доверенная (например, виртуальная сеть между вашей машиной и виртуальной машиной), вы можете полностью опустить ssh. Вы можете установить DISPLAY
переменная, так что удаленное приложение будет подключаться к вашему локальному X-серверу (Quartz) через TCP. Вам просто нужно включить прослушивание TCP в вашем Кварце и установить куки с обеих сторон. Это похоже на разумное руководство: http://oroborosx.sourceforge.net/remotex.html