Después de `ssh` sin` -X` en una máquina, ¿es posible cambiar `$ DISPLAY` para que funcione como` ssh -X`?
22
Después de sshsin -Xuna máquina, ¿es posible cambiar algunas configuraciones (por ejemplo $DISPLAY) para que funcione ssh -X? Si no, ¿cuál es la razón? Gracias.
Sugeriría que el título de la pregunta sea más corto omitiéndolo change $DISPLAY to. El título de la pregunta actual no se puede mostrar en su totalidad en los resultados de búsqueda, y cambiar $ DISPLAY es realmente parte de la respuesta, no parte de la pregunta.
Dmitry Grigoryev
Respuestas:
33
Puede crear una segunda conexión con el reenvío X11 habilitado, y luego también puede usar la DISPLAYvariable de entorno de la segunda conexión en la primera.
En la primera ventana:
$ ssh user@host
user@host$ ...
En la segunda ventana:
$ ssh -Y user@host 'echo $DISPLAY; while sleep 3600; do :; done'
localhost:10.0
Desafortunadamente, sshno hace nada para contener los reenvíos X11 (u otros) al proceso / sesión que inició o al usuario que ejecuta como en la máquina remota (por ejemplo, usando sockets Unix con / sin verificación de credenciales, o usando espacios de nombres), y esos reenvíos son simples enchufes de escucha tcp a los que cualquiera en la máquina remota puede conectarse; Toda la seguridad del reenvío X11 se basa en la autenticación X11.
X11 reenvío a mano
La página de sshd_config(5)manual menciona que:
deshabilitar el reenvío X11 no impide que los usuarios reenvíen el tráfico X11, ya que los usuarios siempre pueden instalar sus propios reenviadores.
Así es como puedes hacer eso a mano.
En primer lugar, asegúrese de deshabilitar cualquier control de acceso basado en el host o el usuario que omita el mecanismo de autenticación x11 [1]:
$ xhost $(xhost | sed -n /:/s/^/-/p)
access control enabled, only authorized clients can connect
Luego muestre la información de autenticación para DISPLAY=:0en la máquina local:
$ xauth list :0
ohzd/unix:0 MIT-MAGIC-COOKIE-1 a86982ddce0c1e1c1a8c5e8b2846e43b
Conéctese a la máquina remota sin ningún reenvío X11:
Configure el $DISPLAYenvvar y agregue la información de autenticación de la máquina local a la remota:
hzy64$ export DISPLAY=localhost:43
hzy64$ xauth add $DISPLAY . a86982ddce0c1e1c1a8c5e8b2846e43b
xauth: file /home/user/.Xauthority does not exist
Ahora estás listo para comenzar:
hzy64$ xterm
[1] debido a una corrección de errores equivocada , el control de acceso basado en el usuario está activado por defecto en Debian a través de /etc/X11/Xsession.d/35x11-common_xhost-local. Peor aún, es el único disponible de forma predeterminada en XWayland, donde tampoco se puede desactivar . Cualquier programa que represente el protocolo X11 (p. Ej. xscope) Tendrá que hacer su propia comprobación de cookies de autenticación x11 (como lo hace ssh), a menos que quiera abrir un agujero en el servidor X11.
Si te preocupa la seguridad, -Xsería un poco mejor que -Y, ¿no?
Stephen Kitt
13
muchos (¿la mayoría?) Programas X11 no funcionan con -X, solo con -Y. la gente no lo nota porque en muchos sistemas (por ejemplo, debian) ForwardX11Trustedestá configurado yesde forma predeterminada, y las opciones -Xy -Yson equivalentes ;-)
change $DISPLAY to
. El título de la pregunta actual no se puede mostrar en su totalidad en los resultados de búsqueda, y cambiar $ DISPLAY es realmente parte de la respuesta, no parte de la pregunta.Respuestas:
Puede crear una segunda conexión con el reenvío X11 habilitado, y luego también puede usar la
DISPLAY
variable de entorno de la segunda conexión en la primera.En la primera ventana:
En la segunda ventana:
Volver a la primera ventana:
Desafortunadamente,
ssh
no hace nada para contener los reenvíos X11 (u otros) al proceso / sesión que inició o al usuario que ejecuta como en la máquina remota (por ejemplo, usando sockets Unix con / sin verificación de credenciales, o usando espacios de nombres), y esos reenvíos son simples enchufes de escucha tcp a los que cualquiera en la máquina remota puede conectarse; Toda la seguridad del reenvío X11 se basa en la autenticación X11.X11 reenvío a mano
La página de
sshd_config(5)
manual menciona que:Así es como puedes hacer eso a mano.
En primer lugar, asegúrese de deshabilitar cualquier control de acceso basado en el host o el usuario que omita el mecanismo de autenticación x11 [1]:
Luego muestre la información de autenticación para
DISPLAY=:0
en la máquina local:Conéctese a la máquina remota sin ningún reenvío X11:
Abra la línea de comando vía
~C
y agregue un reenvío remoto desde el puerto6000+43
al zócalo Unix correspondiente a la pantalla:0
:Configure el
$DISPLAY
envvar y agregue la información de autenticación de la máquina local a la remota:Ahora estás listo para comenzar:
[1] debido a una corrección de errores equivocada , el control de acceso basado en el usuario está activado por defecto en Debian a través de
/etc/X11/Xsession.d/35x11-common_xhost-local
. Peor aún, es el único disponible de forma predeterminada en XWayland, donde tampoco se puede desactivar . Cualquier programa que represente el protocolo X11 (p. Ej.xscope
) Tendrá que hacer su propia comprobación de cookies de autenticación x11 (como lo hace ssh), a menos que quiera abrir un agujero en el servidor X11.fuente
-X
sería un poco mejor que-Y
, ¿no?-X
, solo con-Y
. la gente no lo nota porque en muchos sistemas (por ejemplo, debian)ForwardX11Trusted
está configuradoyes
de forma predeterminada, y las opciones-X
y-Y
son equivalentes ;-)