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.

Tim
źródło
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

Powrót do 1. okna:

user@host$ export DISPLAY=localhost:10.0
user@host$ xterm

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:

$ ssh user@hzy64
user@hzy64's password:
[motd snipped]

Otwórz wiersz poleceń ~Ci dodaj zdalne przekierowanie z portu 6000+43do gniazda unix odpowiadającego displayowi :0:

hzy64$~C
ssh> -R 6043:/tmp/.X11-unix/X0
Forwarding port.

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.

mosvy
źródło
1
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 ;-)
mosvy