Configurar el servidor
Instala xauth, más un programa pequeño para probar:
sudo apt install xauth x11-apps
En /etc/ssh/sshd_config, define:
X11Forwarding yes
El valor por defecto de OpenSSH es no, aunque el archivo de configuración de Debian lo pone en yes. Recarga después de un cambio:
sudo sshd -t && sudo systemctl reload ssh
En algunos sistemas el servicio se llama sshd.
Conectarte y probar
ssh -X user@server
echo $DISPLAY
xeyes
DISPLAY debería parecerse a localhost:10.0. Ese es el proxy que sshd crea en el servidor, no tu pantalla real. No definas DISPLAY a mano.
Para dejarlo fijo en un servidor, usa ~/.ssh/config:
Host server
ForwardX11 yes
-X o -Y
-X, no confiable | -Y, confiable | |
|---|---|---|
| Acceso a tu pantalla | Limitado por la extensión SECURITY de X11 | Total |
Captura de toda la pantalla con xwd -root | Falló: unable to get image | Funcionó |
Propiedades de otra ventana con xprop | Funcionó | Funcionó |
| Límite de tiempo | Ventanas nuevas rechazadas pasados 20 minutos | Ninguno |
El modo no confiable es el valor por defecto original de -X. Esos resultados vienen de nuestra prueba con Xvfb y autenticación X activada. Sin autenticación, -X no limitó nada. Así que -X reduce lo que un programa puede alcanzar, pero no lo aísla. Algunos programas pierden funciones en este modo: xeyes mostró extension "XInputExtension" missing y aun así se abrió.
Si las ventanas dejan de abrirse a los 20 minutos con -X, con Can't open display, sube el límite en ~/.ssh/config, por ejemplo con ForwardX11Timeout 8h.
En Debian y Ubuntu, -X se comporta como -Y
El cliente de Debian define ForwardX11Trusted yes por defecto, así que allí -X es confiable. En nuestra prueba ssh -G mostró yes en Debian 13 y no en macOS. Para el modo más estricto en Debian, añade -o ForwardX11Trusted=no, que es como ejecutamos la prueba no confiable. Mira qué hace tu cliente con:
ssh -G server | grep -i forwardx11
El riesgo de seguridad
Con el reenvío confiable, un programa del servidor puede capturar tu pantalla y leer las teclas que escribes en otras ventanas. También puede hacerlo cualquiera que pueda saltarse los permisos de archivos del servidor, como root, porque puede llegar a la misma pantalla reenviada. No reenvíes X11 a un servidor en el que no confías. Usa -Y solo cuando un programa falle con -X.
Reenviar el agente SSH supone un riesgo parecido para tus claves: consulta los riesgos del agent forwarding de SSH.
En un Mac: XQuartz
macOS no tiene servidor X. Instala XQuartz, y después cierra la sesión y vuelve a iniciarla para que DISPLAY se defina en tu sesión. En Debian confirmamos lo que pasa con un DISPLAY vacío: si echo $DISPLAY está vacío, ssh -X se conecta sin reenvío y sin ningún error visible. Solo ssh -v te dice X11 forwarding requested but DISPLAY not set.
El cliente de macOS busca xauth por defecto en /usr/X11R6/bin/xauth. Si se queja, apúntalo al de XQuartz, que normalmente se instala bajo /opt/X11, en ~/.ssh/config:
Host *
XAuthLocation /opt/X11/bin/xauth
Errores
| Mensaje | Causa | Comprobación |
|---|---|---|
X11 forwarding request failed on channel 0 | X11Forwarding no en el servidor, o falta xauth allí. Lo obtuvimos en ambos casos | sudo sshd -T | grep -i x11forwarding y which xauth |
Error: Can't open display: sin nada después | DISPLAY está vacío, así que el reenvío está desactivado | echo $DISPLAY en ambos lados, y ssh -v |
Warning: untrusted X11 forwarding setup failed: xauth key data not generated | No hay xauth en tu máquina | which xauth, y después define XAuthLocation |
Preguntas
¿Qué diferencia hay entre ssh -X y ssh -Y?
-X es el reenvío no fiable, limitado por la extensión X11 SECURITY. -Y es fiable y da al programa acceso completo a tu pantalla. En Debian y Ubuntu, -X es fiable por defecto.
¿Por qué ssh -X conecta pero no se abre ninguna ventana?
El reenvío no se ha activado. O DISPLAY está vacío en tu equipo, o el servidor tiene X11Forwarding no o no tiene xauth. ssh -v te dice cuál.
¿Hace falta XQuartz en un Mac?
Sí. macOS no tiene servidor X. Instala XQuartz y cierra y vuelve a abrir la sesión antes de usar ssh -X.
¿Funciona el X11 forwarding con Wayland?
Sí, a través de XWayland, que usan la mayoría de los escritorios Wayland. Si echo $DISPLAY muestra un valor como :0 en tu equipo, ssh -X funciona como siempre y los programas se abren como ventanas X11.
¿Por qué el X11 forwarding va tan lento?
X11 hace muchos viajes de ida y vuelta entre el programa y tu pantalla, así que importa más la latencia de la red que el ancho de banda. ssh -C comprime el tráfico y ayuda en conexiones lentas. Para un escritorio completo por internet, VNC o RDP a través de un túnel SSH suele ir más fluido.
Fuentes
- ssh(1), manual de OpenBSD
- ssh_config(5), manual de OpenBSD
- sshd_config(5), manual de OpenBSD
- ssh_config(5), Debian 13
- XQuartz