viernes, 15 de noviembre de 2013

Una ventana hacia el futuro...

Como dijimos en la entrada anterior, ahora hablaremos de cómo se podría automatizar el proceso.
Esto lo haríamos vía web, donde un usuario registrado envía una solicitud y, si no está ocupada la computadora por otro usuario, a este se le envía automáticamente la IP y la contraseña de la computadora a conectarse, almacenadas en una base de datos (dado que la contraseña cambia constantemente, la base de datos se reescribirá cada vez que se cierra la sesión).

Tras iniciada la sesión, se podría crear un archivo que indicase que está ocupada la computadora (para poder detectarlo a través del sitio).
Al detectarse la conexion de una persona, empezará a correr el reloj. A los 30 minutos, por ejemplo, se cerrará la sesion.
Ese usuario no podra usar la computadora hasta pasadas 24hs de su última sesión.
Terminada la sesión, se borra el archivo previamente creado.

Esto es simplemente una forma de implementar una automatización. En este caso no vale la pena, dado que se trata de una sola computadora, en caso de ofrecer un servicio real con decenas de computadoras, claramente convendrá que sólo se tenga que hacer mantenimiento del sistema de automatización y no de cada una de las estaciones.

Con esto nos despedimos.
Cualquier duda sobre lo escrito, comuníquense al mail del blog.

Gracias por su atención,
el equipo de iRemote



Tercero: Establecer una contraseña para acceder a la Mac y cambiar la contraseña automáticamente terminada la sesión (Ábrete Sésamo!)

Ya estamos muy cerca del final! Qué emoción, ¿no? Bueno, no me culpen por estar exaltado. En este blog se ve todo muy bonito, pero para llegar a eso hemos pasado por caminos bastante duros de recorrer.
Nuestra recomendacion es, si no entendemos el código de bash, leer sobre bash; si no entendemos sobre vi, leer sobre vi y asi con todo.
Es importante no frenarse ante el primer error o inconveniente, sino tratar de buscar la forma de solucionarlo y/o, de no poderse, buscar alternativas.

Accederemos al shell mediante PuTTy, crearemos un archivo con vi llamado "cambiarpw.bash" con el siguiente código:

sudo /bin/echo $RANDOM | /usr/bin/perl -we 'BEGIN { @k = unpack "C*", pack "H*", "1734516E8BA8C5E2FF1C39567390ADCA"}; $_ = <>; chomp; s/^(.{8}).*/$1/; @p = unpack "C*", $_; foreach (@k) { printf "%02X", $_ ^ (shift @p || 0) }; print "\n"' | sudo /usr/bin/tee /Library/Preferences/com.apple.VNCSettings.txt

Este código utiliza la variable $RANDOM de bash para generar contraseñas de números enteros aleatorios.
Para averiguar cuál es la contraseña usaremos el siguiente código:

sudo /bin/cat /Library/Preferences/com.apple.VNCSettings.txt | /usr/bin/perl -wne 'BEGIN { @k = unpack "C*", pack "H*", "1734516E8BA8C5E2FF1C39567390ADCA"}; chomp; @p = unpack "C*", pack "H*", $_; foreach (@k) { printf "%c", $_ ^ (shift @p || 0) }; print "\n"'

Lo que estamos haciendo es modificar el archivo "/Library/Preferences/com.apple.VNCSettings.txt" que tiene la contraseña encriptada del VNC Server, poniendole una propia cada vez que ejecutamos cambiarpw.bash.

Bueno, sería un poco molesto que los usuarios que acaban de salir pudiesen meterse antes de hacerse el cambio de contraseña, por lo que lo haremos todo al mismo tiempo. Cerraremos la sesión y cambiaremos el archivo de contraseñas; para sazonarlo mas, la mostraremos en el terminal, sino no la sabemos ni nosotros (otra que Alí Babá):

#cambiar
sudo /bin/echo $RANDOM | /usr/bin/perl -we 'BEGIN { @k = unpack "C*", pack "H*", "1734516E8BA8C5E2FF1C39567390ADCA"}; $_ = <>; chomp; s/^(.{8}).*/$1/; @p = unpack "C*", $_; foreach (@k) { printf "%02X", $_ ^ (shift @p || 0) }; print "\n"' | sudo /usr/bin/tee /Library/Preferences/com.apple.VNCSettings.txt

#checkear
sudo /bin/cat /Library/Preferences/com.apple.VNCSettings.txt | /usr/bin/perl -wne 'BEGIN { @k = unpack "C*", pack "H*", "1734516E8BA8C5E2FF1C39567390ADCA"}; chomp; @p = unpack "C*", pack "H*", $_; foreach (@k) { printf "%c", $_ ^ (shift @p || 0) }; print "\n"'

#cerrar
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -off -restart -agent -privs -all -allowAccessFor -allUsers

Bueno, todo está hecho. Con un administrador que reciba el pedido de uso de la computadora y se encargue de enviar la IP y contraseña a los clientes, ya se puede tener en funcionamiento el trabajo.

En la siguiente entrada, hablaremos un poco de cómo se podría automatizar el proceso via web.

Nos vemos!

Segundo: Establecer sesiones de uso de duración fija (De PuTTy y otras adicciones)

Dado que es un servicio principalmente didáctico, no creemos necesario (e incluso lo vemos contraproducente) que los clientes tengan sesiones ilimitadas. Querremos limitar a, digamos, períodos de 30 minutos por usuario el servicio.
Lamentablemente, la interfaz de VNC Server no es de lo mejor para controlar este tipo de cosas, por lo que trabajararemos en el términal de Mac OSX para hacerlo.
Obviamente, no podemos dejar por ahi una ventana con código para que acceda cualquier cliente que use la computadora, por lo que este control lo realizaremos de manera remota.

Para esto utilizaremos PuTTy.

Este es un cliente SSH (Secure SHell) y nos permitirá conectarnos al Shell de la Mac (Bash) de manera remota.
Para las acciones siguientes, será necesario que tengan las credenciales de algún usuario de la Mac.
Lo primero que verán al abrir el PuTTy es la siguiente ventana:


En Host Name (or IP address) irá la dirección IP de nuestra Mac.
El resto lo dejaremos como viene y presionaremos Open.

Cuando abra la ventana del terminal, nos pedirá credenciales, las ingresamos y ya estaremos dentro. Desde aquí podemos crear archivos, borrar, cerrar la sesión del VNC, cambiar la contraseña, etc.

Empezaremos por crear el archivo:

$ vi sesion.bash

Ahora hemos ingresado en el editor de texto "vi". Es el que usaremos para crear los archivos (también se los puede crear en un block de notas normal y nombrarlos ".bash").

En él insertaremos el siguiente código:

#!/bin/bash

START=$(date +%s)
DIFF=0
while [ $DIFF -le 10 ]
do
  END=$(date +%s)
  DIFF=$(( $END - $START ))

  if [ "$DIFF" -eq "10" ];then
    ./cerrar.sh
  fi
done

Saldremos de vi presionando la tecla Esc y escribiendo :wq!

$ chmod +x sesion.bash

Ahora lo ejecutaremos:

$ ./sesion.bash

Ya tenemos nuestro timer.
Ahora crearemos el script "cerrar.bash" que ejecutamos en el código anterior.

 $ vi cerrar.bash

En él insertaremos el siguiente código:

sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -off -restart -agent -privs -all -allowAccessFor -allUsers

Uff! Ya pudimos hacer las sesiones. Tomémonos un descanso viendo alguna peli de Kubrick o Nolan.

Es necesario entender las posibilidades que trae el poder controlar de esta forma la computadora, todo por código, con el que tenemos mucho más acceso y posibilidades que por la interfaz. Claro, se ve mas complicado y lo es, pero es mucho mas gratificante el resultado que podemos obtener con este pequeño esfuerzo de mas que el que obtendremos con cualquier configuración básica. El trabajar con SSH siempre nos permitirá visualizar de forma cómoda desde nuestra computadora personal el Shell de aquella sobre la que estemos haciendo algún control o modificaciones, lo cual trae muchas ventajas en cuanto a la agilidad del proceso. Para aquellos escépticos que lo vean inseguro... bueno, no lo es; simplemente no. SSH ofrece muchísima seguridad en cuanto a los datos transferidos y a la conexión establecida, por lo que tus usuarios están a salvo.

Primero: Acceder por escritorio remoto a una Mac con OSX a través de una PC con Windows

Bueno, primero lo primero.
Como mencionamos en la entrada anterior el objetivo de este proyecto es acceder a una Mac con OS X (en nuestro caso utilizaremos la version Tiger v10.4.4) a traves de la web. Para ello necesitamos en principio una computadora Mac con los requisitos necesarios para correr todos los servicios necesarios para poder ofrecer la experiencia de un escritorio remoto a traves de una conexion a internet.
La computadora adquirida fue una PowerMac G4 con graficos AGP. La misma cuenta con un procesador Motorola PowerPc a 400Mhz, 384MB de RAM y una placa de video ATI Rage Pro 128.
El primer reto de este proyecto fue encontrar una version exacta del sistema operativo que necesitabamos, el anteriormente mencionado. Resulto bastante complicado teniendo en cuenta que se trata de una maquina del año 1999, corriendo OS 9 y al que habia que encontrarle una version del sistema operativo que sea compatible con los procesadores PowerPC, ya que Apple cambio toda su linea de procesadores a Intel en el año 2005 y que ese mismo sistema operativo que necesitabamos se habia lanzado en 2004. Aunque parezca una incoherencia lo que acabo de decir ya que uno pensaria "Cual es la complicacion de encontrar la version de PowerPc, si el sistema fue lanzado en 2004 y el cambio a Intel recien se hizo en 2005". La respuesta es que desde la primera version de OS X, existen versiones para PowerPc e Intel incluso cuando no existia ninguna Mac con procesadores Intel. Al parecer Apple lanzaba dos versiones de sus sistemas operativos "secretamente" para ya tener todo listo cuando el cambio a Intel se haya completado.
Volviendo al proyecto, y una vez encontrado el sistema correspondiente, empezamos a  buscar los metodos por los cuales se podia acceder a un escritorio completamente funcional y accesible desde cualquier computadora con conexion a internet, a pesar de que este proyecto esta enfocado en permitir a cualquier persona, un acceso, por medio de una PC, a una Mac a sin necesidad de adquirir una; este proyecto tambien permitiria un acceso a traves de otra Mac.
Configurar la Mac para poder tener acceso a traves de Internet es bastante sencillo. Lo que hicimos fue ir a la Configuracion del Sistema y en la parte de Network y en la parte de TCP/IP vamos a cambiar la configuracion de IP dinamica a una estatica. Esto lo hacemos para que la direccion de IP siempre sea la misma y no nos asigne una el Router cada vez que iniciamos una sesion. Esto es necesario para convservar la configuracion para el acceso remoto.
Luego de haber realizado el paso anterior, vamos a ir para atras al panel de Configuracion de Sistema y vamos a la seccion de Sharing y alli vamos a activar la opcione "Apple Remote Desktop" y luego en la parte de "Advanced" debajo de la lista de usuarios podremos administrar los privilegios por usuario, en este caso vamos a aplicar estos privilegios a todos los usuarios. Luego vamos a proceder a abrir los puertos de nuestro router para activar el servicio de Apple Remote Desktop del todo y que nos va a permitir mostrar e interactuar con nuestro escritorio de manera remota, para ello y por motivos meramente academicos y para facilitar su realizacion dejaremos la pagina web donde ustedes podran buscar el modelo de su router y una vez hecho esto, seleccionar "Apple Remote Desktop" y alli encontraran una explicacion de como abrir los puertos necesarior en su propio router - Click Aqui para acceder a la lista de Routers- .
Luego de relizar todo lo mencionado, vamos a proceder a buscar un software que nos permita gestionar accesos via VNC. El mas sencillo que encontramos, dentro de los software "Crossplatform" (disponibles para Mac y PC) fue el RealVNC, alli vamos a descargar el softwar Host en la Mac y configurarlo con la IP estatica que antes habiamos definido. Luego de completado esto, podremos gestionar los nombres de usuario y contraseñas necesarias para acceder y otras configuraciones que no vamos a profundizar ya que dependera del uso personal que le daremos y si tiene o no enfoque comercial o de uso privado.
Hasta aqui esta completado el proceso de preparacion de la Mac Host para acceso por internet. A partir de aqui solo restara descargar el VNC Viewer en el cliente que se quiera conectar con los datos de inicio de sesion configurados en el Host. De aqui en mas el proyecto comenzara la etapa de refinar los aspectos de conexion para el uso determinado que se le haya asignado.
Para cualquier consulta sobre la Mac o alguna configuracion de esta seccion, mi nombre es Rodrigo Vazquez y pueden contactarme a mi mail: rmvazquez@icloud.com.
Saludos!

Materiales

Utilizaremos una PowerMac G4 para trabajar. Sí sí, sabemos que no es la mejor en el mercado, ni es de manera nativa compatible con OSX. Para los fines de este proyecto, un Mac OS 10.4 Tiger será el que estará corriendo en la G4.

Para el lado Windows, utilizaremos cualquier PC que encontremos en el laboratorio.

Los programas a utilizar serán:

-VNC Server (En la PC y en la Mac, será lo que permitirá el escritorio remoto PC-MAC)
-PuTTy (En la PC, para el control remoto de la Mac; tiempo de sesión, cambio de contraseña, etc.)
-WinSCP (Para enviar archivos que sean necesarios desde la PC a la Mac y viceversa)


Introducción al proyecto y objetivos

Hola a todos, lectores.

Somos alumnos de 6to Electrónica en Computadoras del Instituto Industrial Luis A. Huergo en la Ciudad de Buenos Aires, Argentina.
iRemote empezó como el simple proyecto de acceder por escritorio remoto a una Mac, a través de una PC. Se desarrolló un poco mas allá de eso y acabó por ser un sistema con cierto valor de mercado.
Se plantea el poder tener la expriencia del sistema OS X en personas que no tienen la posibilidad de acceder a una Mac.

Objetivos:

-Acceder por escritorio remoto a una Mac con OSX a través de una PC con Windows.
-Establecer sesiones de uso de duración fija.
-Establecer una contraseña para acceder a la Mac.
-Cambiar la contraseña automáticamente terminada la sesión (para evitar que el usuario anterior "moleste" al usuario actual).
-Automatizar el sistema para que, a través de una web, la persona adquiera el servicio y reciba instantanemente la direccion IP de la Mac y la contraseña para acceder.