martes, 12 de abril de 2011

Acceso a escritorio remoto en android

Hoy voy a retribuir con un poco de conocimientos lo aprendido en la red.

Todos quienes mantenemos o administramos una red o sistemas tenemos la misma obsesión; el control, poder acceder desde donde sea a nuestra red y en cualquier momento.

Hoy podemos hacerlo desde cualquier equipo a través de una VPN o VNC, acceder al terminal por ssh si ocupamos equipos Unix o Linux, incluso usando un servidor free-nx podemos levantar una sesión remota completamente segura a traves de ssh y aun cuando el enlace que ocupemos no sea el más rápido.

Pero aun quedan situaciones que no se pueden cubrir completamente, por ejemplo cuando en nuestra red aun tenemos equipos con WIN 2003 server que corren aplicaciones de gestión y queremos acceder en forma segura a ellos. Ciertamente podemos activar el paso del puerto 3389 en nuestro firewall hacia la máquina y usar directamente rdp pero es un riesgo que no conviene tomar.

La situación anterior es de fácil solucion con cualquier equipo portátil que pueda instalar un cliente nx y conectarse al servidor free-nx para utilizar rdesktop y acceder finalmente al escritorio remoto.

Pero y que pasa cuando tenemos solamente un smart phone en nuestras manos???

Esta es la situación, un iphone o cualquier equipo con Android pueden realizar una conexión por ssh, también pueden conectarse a un servidor vnc o un rdp, pero en cualquiera de estos casos o es muy lento (vnc), es inseguro hacerlo directamente (rdp), o finalmente si me conecto por ssh solo puedo acceder a un terminal en modo texto (Android sería ideal si incluyera un servidor X en la instalación), y bueno...Windows no es muy amigable en esta forma.

Aqui vamos, tenemos un equipo en nuestra red llamado 2003srv con la dirección IP interna 10.0.0.23 este servidor tiene habilitado el servicio de Escritorio Remoto o RDP y podemos acceder desde dentro de nuestra red.

Nuestro acceso será un servidor con Linux que ejecute el servicio ssh, con las opciones de Tcp Forwarding habilitadas (AllowTcpForwarding yes en /etc/ssh/sshd_config) y dirección IP 10.0.0.25.

Nuestro firewall re-direccionando las peticiones entrantes al puerto de nuestro servidor con ssh (22 - Pueden cambiar el puerto en sshd_config) hacia la ip del servidor (10.0.0.25).

Un SmartPhone con acceso a Internet, este caso un terminal móvil con Android (Nexus One).

Lo primero será instalar las aplicaciones necesarias en nuestro teléfono, vamos a utilizar (ConnectBot) y Remote RDP Lite, ambas disponibles en Android Market en forma gratuita.

Partimos con ConnectBot que se encargará de gestionar nuestro túnel ssh, una vez instalado configuramos una conexión nueva y la editamos.

En la opción "Apodo" agregamos el nombre con que identificaremos nuestra conexión, marcamos la opción Compresión para mejorar la velocidad en conexiones lentas, en la opción "Iniciar sesión en shell" podemos definir al marcarla si es que queremos un terminal completamente activo y utilizable con una shell donde introducir comandos o simplemente la dejamos desmarcada si sólo vamos a usar la conexión como túnel.

Seguimos con la opción "Mantenerse conectado", la marcamos si queremos que nuestro equipo se reconecte automáticamente cuando perdamos el enlace, y pasamos finalmente a las Opciones de Conexión.

En "Nombre de usuario" obviamente nuestro username que usamos en el servidor Linux, seguimos con el "Host" donde agregamos la IP pública o el nombre de nuestro servidor ejem: "servidor.nuestrodominio.com" y finalizamos con el puerto.

Volvemos atras y debería aparecer guardada nuestra configuración. Ahora nos toca configurar el ssh-tunnel, mantenemos apretado sobre nuestra configuración y nos deslizamos hasta la opción "Editar redirección de puertos", una vez dentro apretamos nuestro botón menú y aparece el dialogo de configuración, en "Nombre de usuario" agregamos un nombre para identificar este redireccionamiento, en la opción "Tipo" seleccionamos "Local", en "Puerto Fuente" introducimos el puerto que vamos a ocupar en nuestro telefono para acceder a RDP en este caso usamos 33890, luego finalizamos con la opción "Destino", aquí agregamos la dirección IP del servidor WIN2003 de nuestra LAN al que queremos acceder por RDP y el respectivo puerto, en este caso sería 10.0.0.23:3389. Volvemos atrás para guardar y finalizamos.

Una buena idea es crear una clave pública para poder acceder mas rápido sin necesidad de introducir el password cada vez que nos conectamos, para esto debemos presionar el botón "Menu" y seleccionar "Administrar clave pública", una vez dentro nuevamente "Menu" y seleccionamos "Generar", ingresamos nuestro nombre de usuario Unix, seleccionamos tipo RSA, en bits mientras mas alto mejor, dejamos en blanco la Contraseña, marcamos "Cargar clave al inicio" y "Generar", se nos pedirá movimientos aleatorios para generar la clave, una vez terminado debemos dejarla abierta (verde) presionando sobre ella y la mantenemos apretada para seleccionar la opción "Copiar clave pública".

Abrimos nuestro correo en el teléfono y nos enviamos la clave copiada (mantenemos apretado sobre el cuerpo del mensaje y pegamos), luego podemos copiar la clave en nuestro computador desde el correo, en este caso la copiamos directamente desde el correo y usando nano en nuestro terminal Linux la agregamos a nuestra sesión siguiendo los siguientes pasos.

1.- Abrimos nuestro archivo de configuración del servidor ssh (/etc/ssh/sshd_config) y nos aseguramos que existan y se encuentren desmarcadas las siguientes opciones:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Guardamos, cerramos y reiniciamos el servidor ssh.

2.- Nos vamos a nuestro terminal y revisamos si existe el directorio .ssh, si no existe lo creamos y nos metemos en el (cd .ssh), una vez dentro creamos un archivo cualquiera, en este caso usando nano creamos el archivo clave-nexus (nano clave-nexus) y dentro pegamos lo que copiamos desde nuestro correo( usando Shift+Control+v pegamos el contenido), y quedaria algo como "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA....AAAB3NzaC1yc2EAAAADAQABAA...KTR2BHw== usuario.

Guardamos y salimos con Control+x

* Pueden usar cualquier editor, en este caso usamos nano por comodidad.

3.- Exportamos el contenido del archivo que creamos hacia el archivo "authorized_keys" de la siguiente forma;
cat clave-nexus >> authorized_keys

Y listo con el tema de las claves públicas, ahora podemos conectarnos desde nuestro teléfono sin necesidad de introducir el password, para ello simplemente vamos al ConnectBot y pinchamos sobre nuestra conexión, si todo va bien nos solicita continuar la primera vez que conectamos y estaríamos ya dentro.

Una vez realizada la conexión con ConnectBot ya estamos re-direccionando el acceso de nuestro servidor RDP con WIN2003 a través de nuestra conexión segura por ssh.

Ahora queda acceder a través del programa Remote RDP Lite, abrimos la aplicación y configuramos nuestra conexión, apretamos la tecla "Menu" de nuestro teléfono y seleccionamos "Add", en Host introducimos "localhost", en Port "33890", en User el usuario rdp, en Password la contraseña del usuario RDP, en Domain el dominio o en blanco, para mejorar la velocidad en color lo dejamos a 8, Screen en 800x600, seleccionamos el tipo de teclado en Keyboard, dejamos las siguientes opciones por defecto y en Name introducimos un nombre para identificar nuestra conexión y volvemos atras para cerrar.

Listo!!! Ahora pinchamos sobre la conexión que acabamos de crear y tenemos nuestro acceso a Escritorio Remoto a través de una conexión segura por SSH.

Como dije alguna vez, lo único que no podemos meter en un tunel ssh seguro por ahora es nuestro hardware...por ahora.

Leer más...