Cómo usar X11 forwarding (reenvío X11) por SSH

Ejecuta ssh -X user@server y después inicia un programa gráfico como xeyes. Su ventana se abre en tu pantalla. El servidor necesita X11Forwarding yes en sshd_config y xauth instalado, y tu máquina necesita un servidor X en marcha, que en un Mac significa XQuartz. -Y da al programa acceso total a tu pantalla, así que úsalo solo con servidores de confianza.

Actualizada el . Cliente y servidor OpenSSH 10.0 en Debian 13, en contenedores desechables, con Xvfb como pantalla y xeyes, xdpyinfo y xwd como programas.

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 pantallaLimitado por la extensión SECURITY de X11Total
Captura de toda la pantalla con xwd -rootFalló: unable to get imageFuncionó
Propiedades de otra ventana con xpropFuncionóFuncionó
Límite de tiempoVentanas nuevas rechazadas pasados 20 minutosNinguno

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

MensajeCausaComprobación
X11 forwarding request failed on channel 0X11Forwarding no en el servidor, o falta xauth allí. Lo obtuvimos en ambos casossudo sshd -T | grep -i x11forwarding y which xauth
Error: Can't open display: sin nada despuésDISPLAY está vacío, así que el reenvío está desactivadoecho $DISPLAY en ambos lados, y ssh -v
Warning: untrusted X11 forwarding setup failed: xauth key data not generatedNo hay xauth en tu máquinawhich 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

Más en Sesiones y tmux

Todas las guías