Algo que echo de menos de Linux, es tener un servidor SSH en mi máquina para el acceso remoto, pues no siempre es posible usar Terminal Server si se dispone de poco ancho de banda (ie: una conexión móvil) y aunque se puede usar CygWin para estos menesteres … no es lo mismo. He venido usando SSH para la administración remota desde hace años y me parece una herramienta imprescindible en cualquier aspecto de las IT que implique acceso remoto y CLI, y aunque que el famoso “cmd.exe” está algo limitadillo (pero da más de si de lo que parece ) con la llegada de PowerShell se echa en falta en Windows tener algo así “de serie”.
SSH, a “grosso modo”, provee de una CLI remota con autenticación segura y cifrado SSL, desde la versión 2 permite la autenticación passwordless por medio de la distribución de claves RSA y además permite la transferencia de ficheros a través de la misma conexión segura mediante SCP ó una sesión SFTP con comandos FTP.
Nunca he entendido porque ni Microsoft en sus sistemas operativos, ni Cisco Systems en su IOS, ni otros fabricantes de sistemas operativos embebidos ó no con CLI integran este protocolo, puesto que todos tienen Telnet y es POTENCIALMENTE inseguro, ya que la autenticación es en texto plano y la conexión no esta cifrada, cualquier usuario cabrón malintencionado con un sniffer podría capturar no solo nuestros datos de autenticación (que ya es grave), si no también una sesión completa y deducir de nuestros comandos y respuestas que tipo de sistema es y donde está la información sensible. Aunque este riesgo es cada vez más improbable con la aparición de las redes conmutadas por medio de switchs, siguen existiendo técnicas para sniffar datos ajenos como el ARP Spoofing.
Así que me puse a buscar servidores y clientes de SSH para Windows, que por supuesto fuesen gratuitos y de momento me he quedado con las siguientes soluciones:
Servidor: FreeSSHd, un servidor SSH que también permite SFTP y SSHv2. Yo estoy usando la versión 1.1.0c y de momento solo tengo dos pegas (tampoco he probado grandes cosas aún, como el ssh tunneling). También integra Telnet pero para eso ya tenemos Windows que integra su propio servicio. Una de las cosas que me ha gustado de este programa es que integra unas ACL tanto para dar paso a los usuarios que nosotros queramos como para bloquear direcciones IP, estén ó no en nuestro sistema. Además cuenta con un manual en su Wiki. La primera pega que mencionaba, es que los usuarios que conecten adquieren los permisos y rol de la cuenta LOCALSERVICE (Servicio Local) y por lo tanto no es recomendable dejar a nadie que se conecte , la segunda … es que el prompt se borra !!! xD Cuidado al escribir Lo segundo es una nimiedad y supongo que se solucionará en siguientes versiones, pero lo primero es una cuestión más de base y no se si se “solventará”. Seguiré buscando más cosas …
Clientes: Como no, Putty y todas sus herramientas complementarias para para SSH, este es el cliente que llevo usando durante varios años tanto a nivel personal como profesional para trabajar con SSH en Windows y acceder a mis máquinas Linux, y solo he tenido dos pegas, el dialogo de confirmación para aceptar el certificado de seguridad público del servidor la primera vez que se conecta a él, que dificulta el uso del programa en scripts para su automatización, y el que guarde su configuración en el registro de Windows, que es algo que me cabrea bastante. Como ya he dicho alguna vez, soy más ‘keyboard ninja’ que usuario de ventanas, así que prefiero más las aplicaciones de consola , pero para los que prefieren las ventanas pueden probar WinSCP como cliente SCP para Windows, tiene una interfaz similar a la de los clientes FTP convencionales y es bastante bueno
Getting started …
Instalar FreeSSHd es bastante simple, además en el mismo proceso de instalación te pregunta si quieres generar ya las claves pública y privada (aceptar) y si queremos instalarlo como servicio de la máquina (al gusto de cada uno), quizás lo que no es tan obvio es ponerlo en marcha la primera vez, pero lo explicaré.
Una vez instalado, al iniciar el servicio nos aparecerá un nuevo icono en la bandeja del sistema indicando el status del servidor, si le hacemos doble clic aparecerá la ventana de settings de la aplicación. Entre las pestañas importantes esta la de SSH, donde podremos configurar el puerto y la dirección IP de escucha (0.0.0.0 para escuchar en todas las interfaces), si queremos que se inicie al arrancar freeSSHd y donde están nuestras claves RSA y DSA, además veréis que se indica cual es el interprete de comandos (Command Shell); la pestaña Authentication donde indicaremos donde se almacenan la claves públicas y podremos configurar las restricciones respecto a SSHv1(autenticación mediante contraseña) y SSHv2(autenticación mediante certificado); Encryption donde podremos especificar que algoritmo de cifrado utilizará el programa, personalmente opino que tanto el de Blowfish, como el de Rijndael (AES 256) como el de Triple DES harán un buen desempeño, aunque yo siempre uso el de Rijndael ; ahora llegamos a la pestaña de Users donde indicaremos que usuarios permitimos conectarse y como, debemos indicar el nombre de usuario, el tipo de autorización; que si es un usuario de la máquina (como debe ser, seguridad centralizada por favor ) seleccionaremos NT authentication; el dominio, que si estamos en una configuración de grupo de trabajo ó es una máquina suelta, pondremos en nombre de la máquina (para averiguarlo, salís a un cmd.exe y ejecutais hostname ); y finalmente que permitiremos hacer a este usuario, Shell para usar la CLI tanto en SSH como en Telnet, SFTP para hacer transferencias seguras de archivos y Tunneling para hacer ssh tunneling. Puesto que el interprete de comandos esta en “%windir%/System32” solo los usuarios con permisos en esa carpeta (Administradores únicamente por lo general) pueden acceder, esto es un serio handicap porque lo ideal sería que usara “%homepath%” como carpeta de inicio… pero claro, esto sería solo válido para los usuarios que se autorizasen con NT authentication.
Si hay algo fácil de instalar es Putty, ya que no se instala, se descargan los binarios tal cual :D. Así que lo mejor es que los descarguemos en alguna carpeta de nuestro “%path%” ó creemos una nueva carpeta y la añadamos a esta variable de entorno. Como curiosidad os diré que esta característica de Putty viene muy bien cuando trabajamos desde ordenadores ajenos en los cuales no podemos instalar nada, puesto que solo con el ejecutable funciona
Al ejecutar ‘putty’ se abrirá la pantalla de opciones del programa, pero si echáis un vistazo a la documentación veréis como indicar todos los parámetros como argumentos evitando así que aparezca esa pantalla
Pues lo dicho, a disfrutar una CLI remota y segura en Windows Recordad que si estais en una red tras un router haciendo NAT debeis mapear el puerto tcp22 a vuestra dirección IP.