Blog de Abelardo Jara Berrocal: Ubuntu, electronica y software libre

Noviembre 26, 2007

Crear un servidor SSH para administrar remotamente Windows

Archivado en: Linux Ubuntu Administracion — Abelardo Jara @ 8:55 pm

Una de las mejores caracteristicas para administracion remota de Linux es su servidor SSH que permite acceder a la computadora en forma remota y segura. Asimismo podemos ejecutar aplicaciones graficas X usando el programa SSH Secure Shell desde Windows.

Otros servicios de red pueden ser encapsulados dentro de un tunel SSH de modo que seran seguros (por ejemplo podemos encapsular VNC dentro del tunel SSH).

He hecho una  guia que les pongo abajo, pero con una correccion:

“sshd + cygwin : Sometime, I had to run sshd on a windows machine using cygwin. After following the install instructions (cache), when I do /usr/sbin/sshd, I get the error : /var/empty must be owned by root and not group or world-writable. To make sshd run, I had to edit the config file /etc/sshd_config so that “UsePrivilegeSeparation” is set to no. BTW, I also needed to do chmod og+r /etc/ssh_host_key, /etc/ssh_host_rsa_key and /etc/ssh_dsa_key. This is bad for security, but then, I got the job done. “

Aqui empieza el tutorial:

(1a) Logueate como administrador
(1b) Asegura que tu cuenta tiene un password
(2a) Create una carpeta llamada c:\cygwin

(2b) g Bajate cygwin’s setup.exe from http://www.cygwin.com/ y guardalo como setup.exe en c:\cygwin

Ejecutalo. Cuando te pregunte: “Just Me” o “All Users”, elige “All Users” (para todos los usuarios)Cuando te pregunte “Local Package Directory“, tipea c:\cygwin

Te saldra una lista de servidores de donde descargar. Elige uno que este cerca a tu pais.

A continuacion te saldra una lista grandota para elegir que paquetes de Cygwin quieres instalar. Es poco comoda de ver, asi que recomiendo elegir el boton arriba a la derecha que dice “View” presionalo hasta que diga al costado de ese boton “Full”. Asi te saldra la lista de todos los paquetes y es mas facil elegir.

Yo generalmente al instalar Cygwin instalo varias cosas como:

  • openssh
  • gcc y gdb (para compilar en C++)
  • tar
  • Todos los paquetes que digan en su inicio de nombre tetex (para tener el editor de documentos LaTeX, super bueno)
  • bash-completion (para que nuestros comandos se autocompleten cuando los tipeamos)
  • sqlite3 (para tener un entorno de bases de datos unipersonales, mejor que Microsoft Access – es compatible con Java)
  • X-startup-scripts (esto es lo mejor, tenemos un servidor X para ejecutar aplicaciones X bajo Cygwin)
  • xemacs (el editor emacs del Linux pero bajo Windows)
  • nano (un editor de consola muy facil de usar)

Tomate una taza de cafe :) g

(3) Despues de finalizar, hacemos click en “Mi PC”, Propiedades , Avanzado, Variables de entorno.
Click el boton “Nuevo” new para añadir a las variables del sistema:
nombre de la variable: CYGWIN
valor de la variable es ntsec tty
(4) Ahora alli mismo busca la variable que dice “Path”. Editala y añade en su final ;c:\cygwin\bin

(5) Ejecuta Cygwin con doble click sobre el icono del Cygwin sobre tu escritorio

Ahora ejecuta el siguiente comando: ssh-host-config


Cuando te pregunte: “privilege separation“, responde yes
Cuando te pregunte: “create local user sshd“, responde yes
Cuando te pregunte: “install sshd as a service“, responde yes

Cuando te pregunte: “CYGWIN=” responde ntsec tty

(6) Despues de este paso iniciamos el servicio ssh tipeando:

net start sshd
o

cygrunsrv –start sshd

(7) Debes asegurarte que todo usuario de Windows tenga un password, y que se haya logueado al menos una vez.

(8) important Despues de ese paso debes volver a ejecutar Cywgin para armonizar los datos de los passwords con cygwin, si no lo haces estos usuarios no se podran loguear remotamente:
mkpasswd -cl > /etc/passwd
mkgroup –local > /etc/group

mkpasswd creara un password tomando de la lista de usuarios de Windows’

(9) Prueba que todo funciona haciendo en una ventana del Cygwin:

ssh localhost

o

ssh tuusuario@127.0.0.1

Y deberia funcionar :)

(10) Si quieres conectarte desde otra computadora, deberas abrir un puerto en el Firewall de Windows, el 22, que corresponde al servidor de SSH.

Listo, tenemos un servidor/cliente SSH instalado en Windows.

Java vs C#: La licencia GPL vs los riesgos de ECMA en Mono y .NET

Archivado en: Reflexiones — Abelardo Jara @ 2:15 pm

Esta bien que tal vez sea un error el que Java sea GPL. Muy probablemente lo sea. A muchas empresas grandes como Apache no les ha caido bien. Pero Mono es un caballito de troya, o no? Por eso mi opcion va por Java (tambien por el lenguaje y sus APIs)

No soy un fanatico del software libre, aunque si me parece que es la opcion mas decente con respecto al sistema operativo. El sistema operativo y herramientas basicas de programacion DEBEN SER LIBRES. Otra cosa son los programas en si (alli en mi opinion si podriamos hacer negocio por propiedad intelectual). En ese sentido no estoy a favor de lo que dice Richard Stallman, el creador de las herramientas de programacion GNU GCC.

Miguel de Icaza ha declarado reiteradamente que las patentes necesarias para la aplicación de las normas ECMA – 334 (C #) y ECMA – 335 (CLI) están disponibles en Microsoft “RAND + Royalty Free”. Esto pareceria un permiso efectivo de uso de la patente abierta de C#, y motivaria mas usar Mono. Pero perdonen, yo aun he visto una declaración oficial de Microsoft que este aceptando este royalty free.

Incluso si aceptamos este RAND+Royalty Free para usar C#/CLI hay que tener un acuerdo de licencia con Microsoft. La razon por la cual Novell firmo el acuerdo de no demandas por violacion de patentes con Microsoft fue con el fin de no ganarse una demanda de Microsoft con respecto al C#/CLI. El mismo Miguel de Icaza (el creador y lider del proyecto Mono) dice que este acuerdo se extiende pero solo a los desarrolladores en plataformas Novell y clientes de Novell. Vease articulo (en ingles):

http://en.wikipedia.org/wiki/Mono_(software)

Siendo estrictos en terminos legales (por favor vean mi siguiente post) las empresas pueden usar C# y Mono solo si lo obtiene de Novell mediante Suse, pero no si lo obtiene o usa en Redhat, Ubuntu, (y distros que no hayan firmado este acuerdo con Microsoft) tiene la obligacion de tener un acuerdo de licencia con Microsoft. Y esto debido a que no existe ningun acuerdo de este tipo entre Microsoft y Ubuntu o Redhat. RAND + Royalty Free aun implica que las empresas que desarrollan distribuyen codigo en C# todavía tienen que obtener una licencia. Y una licencia puede estipular varias cosas (si queremos ser pesimistas, includo el escritorio Gnome si lo programaran en C#).

Aqui hay un texto que copio de Wikipedia y que lo dice Richard Stallman (el creador del GCC)

http://en.wikipedia.org/wiki/Mono_(software):

“Mono is a free implementation of Microsoft’s language C#. Microsoft has declared itself our enemy and we know that Microsoft is getting patents on some features of C#. So I think it’s dangerous to use C#, and it may be dangerous to use Mono. There’s nothing wrong with Mono. Mono is a free implementation of a language that users use. It’s good to provide free implementations. We should have free implementations of every language. But, depending on it is dangerous, and we better not do that. “

Pero me ire mas al lado tecnico. C# es muy bueno y no hay duda, pero solo es una opcion para Windows. El .NET Framework de Microsoft es mejor diseñado que la maquina virtual de Java y corre mas rapido en Windows, tambien. Pero eso es a respecto de la maquina virtual.Pero de alli a hablar que .NET con Mono es multiplataforma es muy diferente. .NET no es multiplataforma, Mono trata de brindar esta capacidad, pero Mono es una implementacion de maquina virtual nueva compatible con .NET, pero no es .NET.

La JVM es mas rapida en Linux y Windows que el Mono (lo afirmo por pruebas de performance y profiling en mis trabajos).

A nivel aplicaciones empresariales de nivel profesional esta por este momento solo Java (el mas utilizado a nivel empresas para multiplataforma, su documentacion y comunidad de desarrolladores es enorme). Que institucion o empresa de prestigio dicta o usa C# con Gtk, lo mas usado es Java o .NET pero no Gtk#. Ni siquiera puedes poner eso en tu CV.

Hablemos ahora del lenguaje y de los entornos de desarrollo: Java tiene una gran ventaja, los IDEs los tiene tanto en Windows y Linux y la calidad de ambos: Netbeans o Eclipse es muy alta. A la altura del Visual Studio. Monodevelop para desarrollar con Mono en Linux es por ahora y lo digo por experiencia (mis aplicaciones compiladas con Mono tienen cierres imprevistos, no corren como esperado en Windows, etc) es por ahora muy verde.

Java tiene ahora una gran madurez de programar donde sea y ejecutar en donde sea. Por ejemplo, yo programo Java sobre Linux con Eclipse y Netbeans y la aplicacion funciona sobre Windows igual de bien. Adicionalmente mis herramientas de desarrollo trabajan como es exigido en un entorno profesional (sin cuelgues ni fallos inesperados). Y ademas dado que Java ahora integra una infinidad de tecnologias que ahorita son las mas fuertes de Internet(XML, RMI, Beans, SOA, etc) y todo desde el mismo lenguaje, pues es bastante comodo al momento de desarrollar.

Mono es ademas aun una implementacion incompleta de la API .NET. Su grupo de desarrollo esta trabajando recien en la implementacion de la API .NET 2.0 (aun inconclusa), mientras en Visual Studio ya van por la API 3.0. Las principales funciones no implementadas completamente son las API de Windows Forms, ASP. NET y ADO. NET. Estos tres frameworks y es importante decirlo no estan dados a ECMA, por tanto Microsoft puede perfectamente demandar al proyecto Mono por violacion de patentes. Microsoft solo ha dado a ECMA C# y el CLI.

Una alternativa a no usar la API de Windows Forms es usar una API libre desarrollada por el proyecto Mono llamada GTK# para hacer formularios. No existe un IDE visual aun comodo para programar diseñar formularios excepto el Glade (que no es comodo para muchos). Si nuestra decision nos impulsa a programar con Mono y GTK# (para no usar Windows Forms en la esperanza de libranos de los problemas de licencia con Microsoft) tenemos a disposicion dos IDEs: Sharpdevelop en Windows o Monodevelop en Linux. Sin embargo, ambos (sobre todo el Monodevelop) no estan a la altura ni cerca del Netbeans o Eclipse (ambos libres) o del Visual Studio, asi que si por madurez y si uno opta por una aplicacion profesional y no para experimentos, recomiendo Java. He probado Monodevelop en Ubuntu Gutsy (anda por la version 0.16) y es muyyy lento. Y su creador de interfaces GUI, Stetic tambien (recien anda por la version 0.1). El debugger tambien es muy malo aun. Asi que estamos hablando de herramientas muy inmaduras, no recomendables si estamos programando en entornos que requieren herramientas realmente profesionales.

Ventajas de Java
1. Para personas que se inician Java+Netbeans es directo para aprender (en universidades, institutos, etc). A ver si Mono+Gtk# lo es. O habra que ver si instituciones de entrenamiento con prestigio o empresas grandes se deciden a programar en Mono+Gtk# (algo experimental) en lugar de .NET+Windows Forms o Java+Swing? (lo harian?)

2. Hay montones (literalmente) de librerias de clases disponibles en Java. Muchas de ellas son open-source (parece que los fanaticos de Microsoft, decir open-source es como una vulgaridad).

3. Java tiene un conjunto de APIs totalmente multiplataforma, incluso para GUIs, multimedia, graficos, 3D, voz, telefonia mobil, y todas las futuras APIs (muy faciles de usar) seguiran siendo multiplataforma (Windows, Linux, …) Mono no tiene estas APIs, asi que hablar de multiplataforma con Mono es inmaduro. Microsoft usara seguro Direct Sound en C# y eso no es ni a balas multiplataforma.

4. Swing esta muy bien diseñada y usa los patrones de diseño MVC, en lo que se cae completamente Windows Forms.

5. Java es mucho mas utilizado a nivel de estudiantes de postgrado con base solida en programacion orientada a objetos (OOP).

6. Aunque no esta reconocida por un estandar internacional, Java es open-source controlado por por Sun y los miembros del JCP (los cuales son muchos, entre ellos Intel, Google, Samsung, Redhat, sino mira
http://jcp.org/en/home/index
). C# es un estandar tipo ECMA pero aparte de Microsoft pocas otras empresas han decidido implementarlo. Sun ademas segrega mucho menos que Microsoft con respecto a sus productos.

7. Otra cosa: el estandar C#/CLI ECMA solo es un subconjunto del framework .NET. Habra que ver si Microsoft decidira si enviara para estandarizacion las futuras APIs de .NET. (LO HARA?Huh?)

Como nota final: miren nomas lo que dice Chris Williams, director de desarrollo de productos de Microsoft, que ellos aceptan la pirateria para motivar que la gente se familiarize con Microsoft y de alli al ocurrir eso pueden presionar con las leyes y obtener ganancias solo si ven que sera rentable (que tactica tan noble no?):

http://64.233.179.104/translate_c?hl=es&langpair=en%7Ces&u=http://www.corporatewatch.org.uk/newsletter/issue13/issue13_part1.htm&prev=/language_tools

Blog de WordPress.com.