Переадресация X11 через SSH и su

Для меня странно, что при использовании ssh-соединения с пересылкой X11 пользователь и корень могут видеть xclock , но другой пользователь этого не видит. Зачем?

 mahmood@cluster:~$ xclock ^C mahmood@cluster:~$ su Password: root@cluster:mahmood# xclock ^C root@cluster:mahmood# su - hmousavi hmousavi@cluster:~$ xclock MobaXterm X11 proxy: Authorisation not recognised Error: Can't open display: localhost:10.0 hmousavi@cluster:~$ 

PS: ^C означает, что я смог увидеть окно xclock , поэтому я нажал ^C чтобы вернуться к терминалу.

Для подключения к дисплею X11 требуются две части информации: отображаемое имя (обычно переданное в переменной среды DISPLAY ) и файл cookie , который является паролем для отображения, которое каждое приложение должно показывать при подключении. Обычно файл cookie хранится в ~/.Xauthority , но его можно сохранить в другом файле, указанном переменной окружения XAUTHORITY .

Похоже, что значение DISPLAY установленное SSH, было сохранено двумя вызовами su . Однако файл cookie находится в ~ mahmood / .Xauthority ; when you run a program as hmousavi, the program looks for a cookie in ; when you run a program as hmousavi, the program looks for a cookie in ~ hmousavi / .Xauthority` и находит другое значение.

В принципе вы можете запустить XAUTHORITY=~mahmood/.Xauthority xclock , но hmousavi, по-видимому, не имеет права на чтение этого файла – файл .Xauthority не должен быть .Xauthority для чтения другим пользователям. Вы можете использовать команду xauth дважды, один раз как mahmood, чтобы извлечь значение cookie ( xauth list localhost:10.0 ) и один раз, как hmousavi, чтобы импортировать это значение ( xauth merge ), но это громоздко. Самый простой способ заставить X11 работать – использовать SSH полностью, потому что SSH автоматически настраивает переадресацию X11:

 mahmood@cluster:~$ ssh -X hmousavi@localhost hmousavi@cluster:~$ xclock 

Добавьте общедоступный ключ SSH от mahmood в hsm.ssh .ssh/authorized_keys hmousavi, чтобы это разрешить.