Czy po `ssh` bez` -X` na maszynie można zmienić `$ DISPLAY`, aby działał jak` ssh -X`?
22
Po sshbez -Xdo maszyny, jest to możliwe, aby zmienić niektóre ustawienia (na przykład $DISPLAY), aby pracować jak ssh -X? Jeśli nie, jaki jest tego powód? Dzięki.
Sugeruję skrócić tytuł pytania, pomijając 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.
Dmitry Grigoryev
Odpowiedzi:
33
Możesz utworzyć drugie połączenie z włączonym przekazywaniem X11, a następnie możesz użyć DISPLAYzmiennej ś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
Niestety sshnic 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.
X11 Przekazywanie ręczne
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=:0na komputerze lokalnym:
$ xauth list :0
ohzd/unix:0 MIT-MAGIC-COOKIE-1 a86982ddce0c1e1c1a8c5e8b2846e43b
Połącz się ze zdalną maszyną bez przekazywania X11:
Ustaw $DISPLAYenvvar 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.
Jeśli zależy Ci na bezpieczeństwie, -Xbyłoby nieco lepiej -Y, prawda?
Stephen Kitt
13
wiele (większość?) programów X11 nie działa -X, tylko z -Y. ludzie tego nie zauważają, ponieważ w wielu systemach (np. debian) ForwardX11Trustedjest ustawiony yesdomyślnie, -Xa -Yopcje 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.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:
W drugim oknie:
Powrót do 1. okna:
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.X11 Przekazywanie ręczne
Strona
sshd_config(5)
wspomina, że: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]:
Następnie pokaż informacje uwierzytelniające
DISPLAY=:0
na komputerze lokalnym:Połącz się ze zdalną maszyną bez przekazywania X11:
Otwórz wiersz poleceń
~C
i dodaj zdalne przekierowanie z portu6000+43
do gniazda unix odpowiadającego displayowi:0
:Ustaw
$DISPLAY
envvar i dodaj informacje uwierzytelniające z lokalnego do zdalnego komputera:Teraz możesz już iść:
[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.źródło
-X
byłoby nieco lepiej-Y
, prawda?-X
, tylko z-Y
. ludzie tego nie zauważają, ponieważ w wielu systemach (np. debian)ForwardX11Trusted
jest ustawionyyes
domyślnie,-X
a-Y
opcje i są równoważne ;-)