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.

Montar particiones remotas mediante SSH utilizando SSHFS bajo Linux

Otro goodie muy interesante que es posible realizar con la ayuda de SSH es la de montar particiones remotas mediante este protocolo, y por supuesto, de manera segura.  Con esto ya no necesito Samba para la mayoría de mis tareas diarias y es posible realizarlo a través de una red insegura como Internet.  En este caso la velocidad, disminuída por la encriptación, es la variable a tener en cuenta.

Estas son las cosas que me permiten hacer los sistemas operativos estilo *nix que me hacen sentir estar realmente utilizando un sistema operativo de verdad y no el de una consola de videojuegos.  Cómo se haría esto en Windows ?  No tengo la menor idea, sin embargo no se me había ocurrido investigar y está tan interesante la idea que voy a experimentar un poco al respecto.

A continuación se relacionan los pasos necesarios para montar un  sistema de archivos remoto mediante la utilización de SSH.

Instalación del módulo fuse.

Las distribuciones modernas incluyen por defecto a este módulo, sin embargo si no se cuenta con él se puede instalar de la distribución nativa.  Para instalarlo en OpenSuse 11.1 se debe ejecutar el siguiente comando.

$ zypper install fuse

Requisitos del usuario local.

El usuario local que va a realizar la conexión debe pertenecer al grupo fuse para poder utilizar este módulo del Kernel para hacer el montaje.  Este paso no fue necesario en mi estación de trabajo con OpenSuse 11.1, sin embargo entiendo que en algunas otras distribuciones es necesario.

$ sudo usermod -G fuse -a usuario_local

Después de incluír al usuario en el grupo es necesario cerrar sesión y volver a ingresar a la cuenta para que los cambios sean tenidos en cuenta.

Cargar el módulo de fuse en memoria.

Es posible realizar la carga del módulo de dos maneras: desde la línea de comando que permite incluírlo temporalmente, es decir, es necesario hacerlo cada vez que se inicia la máquina o configurando al sistema operativo para que lo cargue automáticamente durante su inicio, con esto se garantiza que siempre se encuentre disponible.

Carga temporal del módulo fuse.

$ sudo /sbin/modprobe fuse

Carga regular del módulo fuse.

En la mayoría de Linux esta actividad se realiza ejecutando el siguiente comando.

$ sudo sh -c “echo fuse >> /etc/modules”

Para OpenSuse 11.1 encontré que se debe realizar un procedimiento diferente.

  1. $ sudo vi /etc/sysconfig/kernel
  2. Ubicar la sección MODULES_LOADED_ON_BOOT.
  3. Agregar la palabra fuse entre las comillas.  Si existen mas módulos, estos se separan con espacios.
  4. Ejecutar el siguiente comando para cargar inmediatamente los módulos especificados.$ /etc/init.d/boot.loadmodules restart

Instalar SSHFS.

SSHFS es la parte del proyecto Fuse que nos permite la mágia de realizar el montaje del sistema de archivos remoto.  Para instalar este paquete en OpenSuse 11.1 se ejecuta el siguiente comando.

$ sudo zypper install sshfs

En Ubuntu 8.x es necesario ejecutar el siguiente comando.

$ sudo apt-get install sshfs

Realizar el montaje.

De manera similar a la carga del módulo, el montaje se puede realizar de dos maneras: temporal (sólo para la sesión) o permanente (cada vez que se inicie el sistema operativo).

Montaje temporal.

$ sshfs usuario@servidor:/directorio_remoto /directorio_local

Montaje permanente.

$ sudo vi /etc/fstab

sshfs#usuario@servidor:directorio_remoto  directorio_local    fuse    defaults,noauto

Mantener viva la conexión.

Esta modificación hace que se envíen paquentes con una mayor frecuencia cuando se deje de transmitir información por un tiempo prolongado entre cliente y servidor con el fin de evitar que la conexión finalice (timeout) manteniéndola viva.

$ vi /etc/ssh/ssh_config

ServerAliveInterval  120

Desmontar sistemas de archivos montados con sshfs.

$ fusermount -u directorio_local

Si el sistema de archivos fue montado mediante el segundo método: montaje permanente, este puede ser desmontado normalmente con el comando umount.

Conexiones con SSH sin contraseña desde Linux

Introducción.

Otra cosa interesante que se puede hacer con OpenSSH es establecer conexiones seguras sin necesidad de contraseñas, esto gracias al establecimiento de un par (pública/privada) de llaves RSA.  La seguridad permanece en la passphrase (opcional) de la llave y en la seguridad que se le de a su archivo.

A continuación se relacionan los pasos para establecer una relación de confianza sin contraseña para un usuario entre dos equipos a través de SSH.

Procedimiento.

En el equipo local se crea el par de llaves: pública y privada.  Si ud. ya cuenta con las llaves, puede obviar este paso.

$ ssh-keygen -t rsa

La ejecución de este comando solicita tres respuestas: la ubicación de la llave, el passphrase (*) y su confirmación.  Para las tres preguntas presione Enter, es decir, su respuesta será vacía.

Generadas las llaves se procede a copiar la llave pública al servidor.

$ scp ~/.ssh/id_rsa.pub usuario@servidor:~/

Se accede al servidor para realizar unos ajustes finales.

$ ssh usuario@servidor

Se agrega la llave pública recién generada a las autorizadas para la cuenta.  Finalmente el archivo de la llave pública se remueve.

$ mkdir ~/.ssh
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
$ rm id_rsa.pub

Opcionalmente es aconsejable verificar los permisos de las llaves autorizadas ya que de esto depende de aquí en adelante la seguridad.

$ chmod go-w ~
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

Realizar un nuevo acceso a la cuenta a través de SSH, ya no deberá ser necesario la utilización de la contraseña.

$ ssh usuario@servidor

Asignación de una passphrase (*).

Es posible aumentar un poco mas el nivel de seguridad del manejo de las llaves encriptándolas con una contraseña.  La desventaja es que esta contraseña será solicitada cuando se desee establecer la conexión SSH, pero sólo se solicitará en el momento de la primera conexión, es decir, las siguientes conexiones SSH de la sesión,  se establecerán autenticándose automáticamente mediante la llave previamente establecida.

Para incluír esta contraseña, especifique su valor y confirmación durante el proceso de creación de la llave con ssh-keygen al inicio del procedimiento anterior.

Enlaces.

Conexión a un servidor SSH desde Linux: CLI y aplicaciones gráficas

Introducción.

Como todo el mundo sabe el protocolo SSH permite hacer lo mismo que el protocolo Telnet con una variación importante: de manera segura.  Supuestamente se debería utilizar siempre el primero en medios inseguros como Internet y el segundo en medios confiables como la LAN.  En mi opinión se debe utilizar siempre, Telnet, al igual que FTP, ya no existen para mi.

Pero con SSH se pueden hacer muchas otras cosas -seguras- además de sólo ejecutar aplicaciones de línea de comando (CLI), también es posible ejecutar aplicaciones gráficas mediante el procolo del sistema X Window.  Para hacer esto, antes utilizaba un método bastante problemático y largo.

Conexión – método antigüo.

El primer paso era abrir una conexión SSH normal con el servidor.

$ ssh usuario@servidor

En el servidor remoto, hacía apuntar a la variable DISPLAY hacia mi equipo local.  Siendo 192.168.1.100 la dirección IP de mi estación de trabajo.

$ export DISPLAY=192.168.1.100:0.0

Después, localmente en la estación de trabajo era necesario autorizar la recepción de información desde el servidor.

$ xhost + servidor

A partir de este momento los comandos ejecutados desde el shell remoto se mostrarán gráficamente en el servidor X de la estación de trabajo.

Si se presentaban problemas había que revisar los firewalls, tanto de entrada como de salida para garantizar que no se estuvieran filtrando los puertos requeridos por el protocolo.

Este método funciona tanto con SSH como con Telnet, pero su transmisión no se realiza de manera segura, así que no es ideal.

Conexión – método OpenSSH.

Gracías al servidor SSH de OpenSSH hay una segunda opción, mucho más fácil y mucho mas confiable porque la información transmitida si se encuentra encriptada.

En el servidor modifique el archivo /etc/ssh/sshd_config para que contenga la siguiente línea (sin comentario –#).

# vi /etc/ssh/sshd_config

X11Forwarding yes

Si hubo necesidad de actualizar el archivo mencionado para incluír el cambio, es necesario reiniciar el servicio SSH.

# service sshd restart

Desde la estación de trabajo realice la conexión SSH con el servidor de la siguiente manera.

$ ssh -X usuario@servidor

Listo!  Las aplicaciones que ejecute en el shell remoto se desplegarán gráficamente en el servidor Windows X de la estación de trabajo que inició la sesión de SSH.

Obviamente los pasos 1 y 2 sólo se deben ejecutar una única vez mientras se configura el sshd, así que para incluír las aplicaciones graficas con SSH, en realidad, sólo hay que agregar el modificador -X en la invocación del cliente.

Enlaces.