Ejecutar aplicaciones X remotas desde Windows

Como se sabe, Microsoft Windows no incluye un servidor de ventanas X como si lo hacen otros sistemas operativos como *BSD, Linux y Solaris. No es posible entonces servir local ni remotamente este tipo de aplicaciones. Por este motivo se hace necesario buscar una solución de terceros para que provea de un servidor X a Windows.

Las soluciones gratuitas/libres en este campo son bastante escasas. A mi mente vienen dos opciones:

  1. WiredX de JCraft, desarrollado en Java 2. WeirdX fue su versión para Java 1.1.
  2. Xming de Straight Running, para Windows nativo.

El servidor X de Xming no tiene ningún tipo de restricción o vencimiento -que ya haya visto- y por esto lo voy a utilizar para este ejemplo. De su sitio de descargas en SourceForge se descargan e instalan los siguientes paquetes:

  • Xming.
  • Xming Fonts.

Xming incluye una versión modificada de PuTTY (Xming Portable – PuTTY) que pude utilizar sin ningún problema, sin embargo no encontré como modificar la configuración del PuTTY integrado a mi antojo así que prefiero utilizar el PuTTY convencional, el mismo utilizado en los artículos anteriores.

El primer paso es establecer el tunel seguro hasta el servidor SSH. Para esto se utiliza al PuTTY de manera convencional con las siguientes modificaciones.

  1. Bajo la rama de configuración Connection > SSH, seleccionar la opción Enable compression.
  2. Verificar que el valor de Preferred SSH protocol version sea la 2.
  3. Bajo la rama Connection > SSH > X11, seleccionar la opción Enable X11 forwarding.

A continuación se debe iniciar el servidor X ejecutando el programa Programas > Xming. Su estado se puede verificar con un ícono de una X que aparece en la barra de tareas contíguo al reloj.

Para terminar ejecute algunas aplicaciones gráficas en el servidor a través de la conexión del PuTTY como xclock, gedit o yast2 dependiendo del software instalado en el servidor.

YaST bajo Windows ?  :-P
YaST bajo Windows ? 😛

Listo! Funciona a las mil maravillas y casí tan fácil como la versión de Linux. Me imagino que también requiere el mismo paso preparativo, el activar el envío del protocolo X a través del túnel. En pocas palabras.

# vi /etc/ssh/sshd_config

X11Forwarding yes

# service sshd restart

Tenga en cuenta que estas modificaciones requiere de acceso como root, de ahí a que el prompt esté representado por el #.

Conexiones con SSH sin contraseña bajo Windows utilizando PuTTY

De manera similar a como se hizo bajo un sistema Linux, es posible conectarse a un servidor SSH desde un cliente Windows sin la autenticación usuario/contraseña gracias a la generación de un par de llaves RSA.  Para esto viene al rescate el software libre con PuTTY.

Obtener el software.

Descargar los siguientes archivos.

Si se desea instalar el software en una unidad USB para llevarla consigo a cualquier parte, es mejor instalar la versión de Putty provista por PortableApps.

Generación del par de llaves.

Para generar las llaves: privada y pública, ejecute la aplicación PuTTYgen.exe.

Seleccione la siguiente configuracion.

  • Type of key to generate: SSH2-RSA
  • Number of bits in generated key: 1024
  • Action: Generate.

La aplicación le pedirá que mueva el ratón sobre la ventana por unos momentos para generar con esta información valores al azar.

Deje vacíos los campos Key passphrase y Confirm passphrase (*).

Presione el botón Save public key y almacene la llave pública en una ubicación conocida.  Guárdela con el nombre key.pub.

Presione el botón Save private key y almacene la llave privada en una hubicación conocida.  Guárdela con el nombre key.ppk.

Configuración del servidor remoto.

Transfiera la llave pública (key.pub) al servidor remoto.  Preferiblemente utilizando un transporte seguro como SFTP.

Importe la llave pública agregándola al archivo de llaves autorizadas.

$ ssh-keygen -i -f key.pub >> ~/.ssh/authorized_keys
$ chmod go-rwx ~/.ssh ~/.ssh/authorized_keys
$ rm key.pub

Configuración del cliente.

Inicie a PuTTY.exe y realice la siguiente configuración.

  • Session:
    • Host Name: Dirección IP o nombre FQDN del servidor SSH.
    • Connection Type: SSH.
    • Saved Sessions: Nombre para la sesión.
  • Connection:
    • Data:
      • Auto-login username: nombre de usuario (opcional).
    • SSH:
      • Preferred SSH protocol version: 2.
      • Auth:
        • Presione el botón Browse y ubique el archivo de la llave privada (key.ppk).

Vuelva a la rama Session y presione el botón Save para guardar la configuración recién especificada.

Conexión con el servidor remoto.

Inicie PuTTy.exe, elija la sesión almacenada con el nombre que especificó anteriomente y presione el botón Open.  Si se especificó el nombre de usuario bajo el campo Auto-login username el ingreso deberá ser inmediato, de lo contrario, el nombre de usuario será solicitado.

Asignación de una passphrase (*).

Una contraseña para la llave privada aumenta el nivel de seguridad de este esquema de autenticación ya que aunque una persona autorizada la obtenga no podrá utilizarla si no conoce la contraseña exacta.  La desventaja es que esta contraseña será solicitada al inicio de cada conexión.

Para esto se utiliza entonces otra aplicación de la familia PuTTY, el agente de autenticación SSH Pageant.  Su función es la de guardar en memoria las llaves privadas que ya han sido decifradas, es decir, su ejecución permite que la contraseña de las llaves privadas cifradas sea solicitada una única vez por cada sesión.

Para establecer una contraseña para la llave privada establezca su valor en los campos Key passphrase y Confirm passphrase cuando se está generando el par de llaves con PuTTYgen.exe.

Para utilizar el agente se debe ejecutar pageant.exe y hacer clic derecho sobre el icono que se crea en la barra de tareas al lado del reloj.

Seleccionar la opción Add key y seleccionar la ubicación del archivo de la llave privada: key.ppk.

En el diálogo Enter passphrase for key proporcione la contraseña que eligió cuando se estaba creando el par de llaves.

Este procedimiento faculta a PuTTY para conectarse directamente sin necesidad de solicitar nuevamente esta contraseña ya que será inmediatamente proporcionada por el agente.

Using username “jimezam”.
Authenticating with public key “rsa-key-20090202” from agent
Last login: Mon Feb  2 21:52:56 2009 from xxx.xxx.xxx.xxx
Have a lot of fun…

La información almacenada por el Pageant se ubica en memoria únicamente y se mantiene únicamente durante la sesión del usuario.

Enlaces.