Dopo che `ssh` senza` -X` su una macchina, è possibile cambiare `$ DISPLAY` per farlo funzionare come` ssh -X`?


22

Dopo sshsenza -Xa una macchina, è possibile modificare alcune impostazioni (ad esempio $DISPLAY) per farlo funzionare come ssh -X? In caso contrario, qual è la ragione? Grazie.


Suggerirei di abbreviare il titolo della domanda tralasciando change $DISPLAY to. Il titolo della domanda corrente non può essere visualizzato per intero nei risultati di ricerca e la modifica di $ DISPLAY fa davvero parte della risposta, non fa parte della domanda.
Dmitry Grigoryev il

Risposte:


33

È possibile creare una seconda connessione con l'inoltro X11 abilitato, quindi è anche possibile utilizzare la DISPLAYvariabile di ambiente dalla seconda connessione nella prima.

Nella prima finestra:

$ ssh user@host
user@host$ ...

Nella seconda finestra:

$ ssh -Y user@host 'echo $DISPLAY; while sleep 3600; do :; done'
localhost:10.0

Torna alla prima finestra:

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

Sfortunatamente, sshnon fa nulla per contenere gli inoltri X11 (o altri) al processo / sessione avviato o all'utente che esegue come sul computer remoto (ad es. Utilizzando socket Unix con / out controllo credenziali o utilizzando spazi dei nomi), e tali inoltri sono semplici prese di ascolto tcp a cui chiunque sulla macchina remota può connettersi; tutta la sicurezza dell'inoltro X11 si basa sull'autenticazione X11.

X11 Inoltro a mano

La sshd_config(5)manpage menziona che:

la disabilitazione dell'inoltro X11 non impedisce agli utenti di inoltrare il traffico X11, poiché gli utenti possono sempre installare i propri server di inoltro.

Ecco come puoi farlo a mano.

Prima di tutto, assicurati di disabilitare qualsiasi controllo di accesso basato su host o utente che ignori il meccanismo di autenticazione x11 [1]:

$ xhost $(xhost | sed -n /:/s/^/-/p)
access control enabled, only authorized clients can connect

Quindi mostra le informazioni di autenticazione per DISPLAY=:0sul computer locale:

$ xauth list :0
ohzd/unix:0  MIT-MAGIC-COOKIE-1  a86982ddce0c1e1c1a8c5e8b2846e43b

Connettiti al computer remoto senza alcun inoltro X11:

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

Aprire la riga di comando tramite ~Ce aggiungere un inoltro remoto dalla porta 6000+43al socket unix corrispondente al display :0:

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

Impostare $DISPLAYenvvar e aggiungere le informazioni di autenticazione dal locale al computer remoto:

hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth:  file /home/user/.Xauthority does not exist

Ora sei pronto per partire:

hzy64$ xterm

[1] a causa di una correzione errata , il controllo degli accessi basato sull'utente è attivato di default in Debian tramite /etc/X11/Xsession.d/35x11-common_xhost-local. Peggio ancora, è l'unico disponibile per impostazione predefinita in XWayland dove non può essere disattivato . Qualsiasi programma che xscopeesegue il proxy del protocollo X11 (ad es. ) Dovrà eseguire il proprio controllo dei cookie di autenticazione x11 (come fa ssh), a meno che non voglia aprire un buco nel server X11.


1
Se ti preoccupi della sicurezza, -Xsarebbe leggermente meglio di -Y, no?
Stephen Kitt,

13
molti (la maggior parte?) programmi X11 non funzionano con -X, solo con -Y. la gente non se ne accorge perché su molti sistemi (es. debian) ForwardX11Trustedè impostato di yesdefault e le opzioni -Xe -Ysono equivalenti ;-)
mosvy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.