Ответы:
Вы можете создать второе соединение с включенной переадресацией 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.
В 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.
Установите $DISPLAY
envvar и добавьте информацию об аутентификации с локального компьютера на удаленный компьютер:
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.
-X
было бы немного лучше -Y
, не так ли?
-X
, только с -Y
. люди не замечают этого, потому что во многих системах (например, в Debian) по умолчанию ForwardX11Trusted
установлено yes
значение, а параметры -X
и -Y
являются эквивалентными ;-)
change $DISPLAY to
. Название текущего вопроса не может быть отображено полностью в результатах поиска, и изменение $ DISPLAY действительно является частью ответа, а не частью вопроса.