Можно ли после `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
К сожалению, 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:
Установите $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.
Если бы вы заботились о безопасности, -Xбыло бы немного лучше -Y, не так ли?
Стивен Китт
13
многие (большинство?) программы X11 не работают -X, только с -Y. люди не замечают этого, потому что во многих системах (например, в Debian) по умолчанию ForwardX11Trustedустановлено yesзначение, а параметры -Xи -Yявляются эквивалентными ;-)
change $DISPLAY to
. Название текущего вопроса не может быть отображено полностью в результатах поиска, и изменение $ DISPLAY действительно является частью ответа, а не частью вопроса.Ответы:
Вы можете создать второе соединение с включенной переадресацией X11, а затем вы также можете использовать
DISPLAY
переменную среды из второго соединения в первом.В 1-м окне:
Во 2-м окне:
Вернуться к 1-му окну:
К сожалению,
ssh
не делает ничего, чтобы содержать перенаправления X11 (или других) процессу / сеансу, который он запустил, или пользователю, который он запускает, как на удаленной машине (например, с помощью сокетов Unix с / без проверки учетных данных или с помощью пространств имен), и эти пересылки являются простыми сокетами прослушивания tcp, к которым может подключиться любой удаленный компьютер; вся безопасность пересылки X11 зависит от аутентификации X11.X11 Пересылка вручную
В
sshd_config(5)
справочной странице упоминается, что:Вот как вы можете сделать это вручную.
Прежде всего, обязательно отключите любой контроль доступа на основе хоста или пользователя, который обходит механизм аутентификации x11 [1]:
Затем покажите информацию об аутентификации для
DISPLAY=:0
на локальной машине:Подключитесь к удаленному компьютеру без переадресации X11:
Откройте командную строку через
~C
и добавьте удаленную переадресацию с порта6000+43
на сокет unix, соответствующий отображению:0
:Установите
$DISPLAY
envvar и добавьте информацию об аутентификации с локального компьютера на удаленный компьютер:Теперь вы готовы к работе:
[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
являются эквивалентными ;-)