X11 forwarding a través de SSH

X11, como supongo la mayoría de Uds. sabrá, es el servidor gráfico que usan casi todas las distribuciones Linux. Este servidor permite, entre otras cosas, forwarding a través de SSH. Esto significa que es posible ejecutar apliaciones gráficas de una máquina remota exportando el display a nuestro escritorio. Es decir, la aplicación se ejecuta en el servidor remoto, pero la interfaz gráfica la visualizamos en nuestro escritorio local.

Pasos a seguir

1.- En el servidor, editar el archivo /etc/ssh/ssh_config y modificar la opción X11Forwarding para que quede así:

X11Forwarding yes

Luego de este cambio, posiblemente sea necesario reiniciar el demonio ssh. La forma de hacer esto varía de acuerdo a cada distribución Linux. Lo más sencillo es reiniciar la máquina.

2.- En el escritorio local, loguearse al servidor a través de SSH utilizando el parámetro -X:

ssh -X user@hostname

Donde user es el nombre de usuario utilizado para loguearse en el servidor y hostname es el IP o el alias del servidor.

3.- Para ejecutar una aplicación, simplemente hay que hacerlo desde el terminal. Por ejemplo:

firefox

Trusted X11 forwarding

Al habilitar Trusted X11 forwarding es posible acelerar un poco la velocidad de conexión, ya que se evitan algunos pasos vinculados a la seguridad de la misma.

En caso de que la velocidad sea más importante que la seguridad, todo lo que hay que hacer es lo siguiente:

1.- En el servidor, editar el archivo /etc/ssh/ssh_config y modificar la opción ForwardX11Trusted para que quede así:

ForwardX11Trusted yes

2.- En el escritorio local, loguearse al servidor a través de SSH utilizando el parámetro -Y:

ssh -Y user@hostname

Compressed X11 forwarding

En aquellos escenarios en los que la conexión entre el servidor y el cliente no sea la mejor, es posible comprimir los datos enviados por el servidor.

Para ello, a la hora de loguearse al servidor vía SSH hay que agregar el parámetro -C:

ssh -X -C user@hostname

21 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   hectorq dijo

    Dificil, mucho comando.
    Mejor no me complico la vida y ejecuto Teamviewer

    1.    eliotime3000 dijo

      No sé, pero yo me complico más con el TeamViewer y su bendita clave.

    2.    x11tete11x dijo

      me parece que son 2 cosas distintas, que alguien me corrija, pero este metodo que plantea aca, no es para que levante el entorno entero como si lo hace teamviewer, sino para por ejemplo poner como dice ahi «firefox» y que en tu maquina se abra firefox como siempre pero en verdad lo esta ejecutando desde la maquina remota..

      1.    AGR dijo

        Efectivamente, como has indicado es para ejecutar firefox (del servidor) en tu máquina. Es justo lo que me están enseñando ahora.

      2.    usemoslinux dijo

        Así es, campeón!
        Como diría un amigo, no hay que confundir los tantos: «una cosa es una cosa y otra cosa es otra cosa». Jaja…
        Nah, en serio, tete tiene razón no este método no es comparable con teamviewer.
        Abrazo! Pablo.

  2.   jhona dijo

    muy bueno, útil sobre todo y la verdad lo uso mucho ultimamente 🙂
    la pregunta es: ssh_config o sshd_config? (man sshd_config porque no todas las distros lo traen por defecto, aunque lo ideal es declarar como usuario en $HOME/.ssh/config )
    tambien se puede mirar la opcion X11UseLocalhost
    o la clásica con DISPLAY=ip:X.x y xhost,
    y ante cualquier problema darle al verbose (-v)

    1.    usemoslinux dijo

      Así es… buen aporte!

  3.   Kevin Maschke dijo

    Pues me parece muy interesante! Muchas gracias! Tendré que probarlo en mi servidor de ovh! 🙂

    1.    usemoslinux dijo

      Adelante! Abrazo! Pablo.

  4.   manuti dijo

    Muy buen artículo. Una cuestión, uso mucho esta opción para conectar a una Raspberry Pi con Raspbian y Lxde, desde un Ubuntu con Unity. Muy a menudo ocurre que los iconos de las aplicaciones se ven corruptos ¿A qué podría deberse?
    Otra cosa, yo suelo añadir la opción de ejecutar en segundo plano las aplicaciones gráficas: firefox &

    1.    usemoslinux dijo

      Buen aporte el de correr las apps en segundo plano, no lo había pensado.
      Respecto de los íconos… eso te pasa usando compressed X11 forwarding??
      Abrazo! Pablo.

      1.    manuti dijo

        No, lo de compressed me lo has descubierto tú. Cuando tenga un hueco te mando una captura. Como info adicional uso faenza en Ubuntu, el cliente, y los iconos por defecto de Lxde en el servidor.

        1.    AGR dijo

          La respuesta la tienes ahí. El servicio que te traes no implica que te traigas también el entorno de escritorio. Solo te estás trayendo el servicio, y con la orden indicas que es un servicio gráfico. Las X que se ejecutan son las del cliente, en tu caso las de Ubuntu con Unity, y tiene que interpretar el tipo de iconos, dando equivalencia de Lxde a Unity, de los que tiene por defecto a los faenza (casualidad que me explicaron esto la semana pasada 😛 )

  5.   marito dijo

    muy buen artículo!, yo hasta ahora hacia algo similar a hectorq, tengo dos serv. sin monitor, cuando necesito firefox para descargar algo (wget y transmission a veces no son suficiente), usaba ssh, startx y entraba por vnc/remmina. Bastante engorroso mi metodo, mucho mas facil hacer x11-forwarding
    PS: en debian cambian un poco los archivos de config, parece que ForwardX11 cumple la misma funcion, saludos!

  6.   x11tete11x dijo

    ahora que ando boludeando con un server me viene taaaaaaaaaaaan bien esto, y mass en este preciso momento xD, necesito usar multisystem pero el SO de mi notebook es Chakra Linux, y me tengo que fumar medio gnome compilandolo yo mismo para poder ejecutarlo, asique lo voy a instalar en el server con Debian, y forwarding xD jajajaj

    1.    usemoslinux dijo

      Que bueno, campeón!
      Me alegro! Abrazo!
      Pablo.

  7.   PABLO ALEJANDRO SANCHEZ dijo

    Muchas gracias por la info!

    Valor agregado:

    Tengo Ubuntu Server 14.04.1 LTS
    Tuve problemas con: ./Xauthority
    Y para hacerlo funcionar necesite hacer estos cambios en: /etc/ssh/sshd_config

    ….
    # Lifetime and size of ephemeral version 1 server key
    KeyRegenerationInterval 3600
    ServerKeyBits 768
    ….
    # Authentication:
    LoginGraceTime 120
    PermitRootLogin yes
    StrictModes yes

    y reiniciar el servicio ssh: # sudo service ssh restart

    Espero que le haya servido a alguien.

    1.    usemoslinux dijo

      Bien! Gracias x el aporte!
      Saludos! Pablo.

  8.   Pablito el calvito dijo

    Muy bien explicado! Hay una cosa que no entiendo, si la aplicación se ejecuta en el host remoto ¿quiere decir que los gráficos también los procesa el host? Es decir,¿será la tarjeta gráfica del host quien procese los datos y simplemente le envía la información al cliente para que la visualice? Se me ocurre que así podría ejecutar desde mi pequeña notebook aplicaciones de modelado 3D que requieran mucho más potencia.

  9.   culo dijo

    dan ganas de cagar

  10.   socio dijo

    yo solo digo que quiero un abrigo