Після `ssh` без` -X` на машині, чи можна змінити `$ DISPLAY`, щоб він працював як` ssh -X`?


22

Після sshбез -Xмашини, чи можна змінити деякі параметри (наприклад $DISPLAY), щоб вона працювала ssh -X? Якщо ні, то в чому причина? Спасибі.


Я б запропонував скоротити заголовок питання, не виходячи з нього change $DISPLAY to. Поточний заголовок питання не може відображатися повністю в результатах пошуку, а зміна $ DISPLAY - це дійсно частина відповіді, а не частина питання.
Дмитро Григор’єв

Відповіді:


33

Ви можете створити друге з'єднання з увімкненою переадресацією X11, а потім можете також використовувати DISPLAYзмінну середовища з другого з'єднання в першому.

У першому вікні:

$ ssh user@host
user@host$ ...

У другому вікні:

$ ssh -Y user@host 'echo $DISPLAY; while sleep 3600; do :; done'
localhost:10.0

Назад до першого вікна:

user@host$ export DISPLAY=localhost:10.0
user@host$ xterm

На жаль, sshне містить нічого, що містить перенаправлення X11 (або інших) до процесу / сеансу, який він розпочав, або користувачеві, який він працює, як на віддаленій машині (наприклад, за допомогою розеток Unix з / з перевірки облікових даних або з використанням просторів імен), і ці переадресації - це прості розетки для прослуховування tcp, до яких може підключитися будь-хто з віддаленої машини; вся безпека переадресації X11 покладається на аутентифікацію X11.

X11 Пересилання вручну

На сторінці sshd_config(5)вказується, що:

відключення переадресації X11 не заважає користувачам переадресовувати трафік X11, оскільки користувачі завжди можуть встановлювати власні форвардери.

Ось як це можна зробити вручну.

Перш за все, не забудьте відключити будь-який контроль доступу на основі хоста чи користувача, який обходить механізм аутентифікації x11 [1]:

$ xhost $(xhost | sed -n /:/s/^/-/p)
access control enabled, only authorized clients can connect

Потім покажіть інформацію про автентичність DISPLAY=:0на локальній машині:

$ xauth list :0
ohzd/unix:0  MIT-MAGIC-COOKIE-1  a86982ddce0c1e1c1a8c5e8b2846e43b

Підключіться до віддаленої машини без перенаправлення X11:

$ ssh user@hzy64
user@hzy64's password:
[motd snipped]

Відкрийте командний рядок через ~Cта додайте віддалене переадресація з порту 6000+43в unix-сокет, що відповідає дисплею :0:

hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.

Встановіть $DISPLAYenvvar та додайте інформацію про автентифікацію з локальної на віддалену машину:

hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth:  file /home/user/.Xauthority does not exist

Тепер ви готові піти:

hzy64$ xterm

[1] через помилково виправлену помилку керований користувачем контроль доступу за замовчуванням у Debian через /etc/X11/Xsession.d/35x11-common_xhost-local. Гірше, що це єдиний доступний за замовчуванням в XWayland, де його також не можна вимкнути . Будь-яка програма, яка має проксі-сервери протоколу X11 (наприклад, xscope), повинна виконати власну перевірку файлів cookie x11 (як це робить ssh), якщо тільки вона не захоче відкрити зияючий отвір для сервера X11.


1
Якщо ви дбаєте про безпеку, -Xбуло б трохи краще -Y, чи не так?
Стівен Кітт

13
багато (більшість?) X11 програм не працюють -X, тільки з -Y. люди не помічають цього, оскільки для багатьох систем (наприклад, debian) ForwardX11Trustedвстановлено yesза замовчуванням, а параметри -Xта -Yпараметри еквівалентні ;-)
mosvy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.