Можно ли после `ssh` без` -X` на машине изменить `$ DISPLAY`, чтобы он работал как` ssh -X`?

22

После того, как sshне -Xк машине, можно изменить некоторые параметры (например $DISPLAY) , чтобы заставить его работать , как ssh -X? Если нет, то в чем причина? Спасибо.

Тим
источник
Я бы предложил сделать заголовок вопроса короче, пропустив change $DISPLAY to. Название текущего вопроса не может быть отображено полностью в результатах поиска, и изменение $ DISPLAY действительно является частью ответа, а не частью вопроса.
Дмитрий Григорьев

Ответы:

33

Вы можете создать второе соединение с включенной переадресацией X11, а затем вы также можете использовать DISPLAYпеременную среды из второго соединения в первом.

В 1-м окне:

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

Во 2-м окне:

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

Вернуться к 1-му окну:

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.

mosvy
источник
1
Если бы вы заботились о безопасности, -Xбыло бы немного лучше -Y, не так ли?
Стивен Китт
13
многие (большинство?) программы X11 не работают -X, только с -Y. люди не замечают этого, потому что во многих системах (например, в Debian) по умолчанию ForwardX11Trustedустановлено yesзначение, а параметры -Xи -Yявляются эквивалентными ;-)
mosvy