Odpowiedzi:
Możesz utworzyć drugie połączenie z włączonym przekazywaniem X11, a następnie możesz użyć DISPLAY
zmiennej środowiskowej z drugiego połączenia w pierwszym.
W 1. oknie:
$ ssh user@host
user@host$ ...
W drugim oknie:
$ ssh -Y user@host 'echo $DISPLAY; while sleep 3600; do :; done'
localhost:10.0
Powrót do 1. okna:
user@host$ export DISPLAY=localhost:10.0
user@host$ xterm
Niestety ssh
nic nie zawiera przekazywania X11 (lub innych) do uruchomionego procesu / sesji lub użytkownika uruchomionego jak na komputerze zdalnym (np. Za pomocą gniazd Unix z poświadczeniami / outami sprawdzającymi lub za pomocą przestrzeni nazw), i te przekazy są prostymi gniazdami nasłuchowymi tcp, z którymi może się połączyć każdy na zdalnej maszynie; całe bezpieczeństwo przekazywania X11 opiera się na uwierzytelnieniu X11.
Strona sshd_config(5)
wspomina, że:
wyłączenie przekazywania X11 nie uniemożliwia użytkownikom przekazywania ruchu X11, ponieważ użytkownicy zawsze mogą instalować własne usługi przesyłania dalej.
Oto jak możesz to zrobić ręcznie.
Przede wszystkim należy wyłączyć kontrolę dostępu opartą na hoście lub użytkowniku, która omija mechanizm uwierzytelniania x11 [1]:
$ xhost $(xhost | sed -n /:/s/^/-/p)
access control enabled, only authorized clients can connect
Następnie pokaż informacje uwierzytelniające DISPLAY=:0
na komputerze lokalnym:
$ xauth list :0
ohzd/unix:0 MIT-MAGIC-COOKIE-1 a86982ddce0c1e1c1a8c5e8b2846e43b
Połącz się ze zdalną maszyną bez przekazywania X11:
$ ssh user@hzy64
user@hzy64's password:
[motd snipped]
Otwórz wiersz poleceń ~C
i dodaj zdalne przekierowanie z portu 6000+43
do gniazda unix odpowiadającego displayowi :0
:
hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.
Ustaw $DISPLAY
envvar i dodaj informacje uwierzytelniające z lokalnego do zdalnego komputera:
hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth: file /home/user/.Xauthority does not exist
Teraz możesz już iść:
hzy64$ xterm
[1] z powodu błędnej poprawki , kontrola dostępu oparta na użytkownikach jest domyślnie włączona w Debianie przez /etc/X11/Xsession.d/35x11-common_xhost-local
. Co gorsza, jest to jedyny domyślnie dostępny w XWayland, gdzie również nie można go wyłączyć . Każdy program, który proxy protokołu X11 (np. xscope
) Będzie musiał przeprowadzić własne sprawdzanie plików cookie uwierzytelniania x11 (tak jak robi to ssh), chyba że chce otworzyć lukę na serwerze X11.
-X
byłoby nieco lepiej -Y
, prawda?
-X
, tylko z -Y
. ludzie tego nie zauważają, ponieważ w wielu systemach (np. debian) ForwardX11Trusted
jest ustawiony yes
domyślnie, -X
a -Y
opcje i są równoważne ;-)
change $DISPLAY to
. Bieżącego tytułu pytania nie można wyświetlić w całości w wynikach wyszukiwania, a zmiana $ DISPLAY jest naprawdę częścią odpowiedzi, a nie częścią pytania.