Что происходит в фоновом режиме при пересылке 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

Другие вопросы по тегам