lunes, 14 de octubre de 2013

SSH: Autenticación mediante Claves (Sin Password)

SSH (Secure Shell) es un protocolo que facilita la comunicación segura entre 2 sistemas utilizando la arquitectura Cliente/Servidor y permite a los usuarios conectarse a un host remotamente.

Existen dos formas de autentificarse en SSH

  • Autentificación por Password 
  • Autentificación por Claves

Yo me centrare en la segunda opción, ya que con la primera solo basta saber la  password del usuario remoto.

Objetivo:

Usar autentificación mediante clave publica para acceder a un servidor remoto sin tener que escribir la password.

Ventajas
  • Hacer menos tedioso el acceso a servidores que con frecuencia accedemos.
  • Nos permite automatizar tareas ( Script de backup, cront etc).

Escenario



1) Generando Claves En Ambiente Local:


Entendiendo el comando ssh-keygen


  • Comando que genenera, administra y convierte las claves de autenticación SSH.
  • Las claves pueden ser de encriptación tipo RSA o DSA ( en protocolo SSH 2).
  • Normalmente se nos sugiere el nombre del archivo donde se guardará la clave privada.
  • Normalmente la clave publica tendra el mismo nombre que la privada pero con extension .pub .
  • Normalmente nos preguntará si deseamos ingresar una frase de paso (contraseña) para seguridad de nuestras claves.

Ejecutamos uno de estos 2 comandos:

user_a@host_a ]# ssh-keygen
                      ó
user_a@host_a ]# ssh-keygen -t rsa -b 2048


NOTA Estos comandos realizan lo mismo, ya que el primero tiene por defecto las opciones del segundo.

     -b  : tamaño en bytes de clave
     -t   : tipo rsa o dsa


Luego de ejecutar lo anterior, la salida en pantalla sera la siguiente:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user_a/.ssh/id_rsa):

  • La primera linea indica que se van a generar el par de claves (privada / publica).
  • En la segunda linea se nos sugiere la ubicación en donde se guardara la clave privada, si no ingresamos nada por defecto se guarda en el path home del usuario (/home/user_a/.ssh/id_rsa).

Dejamos todo tal cual y presionamos ENTER .....

 Luego por pantalla se nos indicara si deseamos ingresar una frase de paso de seguridad(contraseña)para nuestras claves.
Enter passphrase (empty for no passphrase): 
Como nosotros deseamos conectarnos al host remoto sin password no escribimos nada y presionamos ENTER ...

Luego se nos volverá a preguntar por la misma frase de paso...
 Enter same passphrase again:
No introducimos nada y volvemos a presionar ENTER...

Si todo resulta bien obtendremos en pantalla algo similar a esto:
 
Your identification has been saved in /home/user_a/.ssh/id_rsa.
Your public key has been saved in /home/user_a/.ssh/id_rsa.pub.
The key fingerprint is:
c7:8c:2d:88:b0:42:d5:2f:7a:4f:6b:bd:f4:b7:9b:23 user_a@host_a
The key's randomart image is:
+--[ RSA 2048]----+
|   ..            |
|  .  .           |
| ..   .          |
|.  o o o =       |
|. . o o S =      |
| . . . . o       |
|    . o o.       |
|       +...E o.  |
|      .  ...o++  |
+-----------------+

Hasta ahora tenemos:

  • Generadas nuestra clave privada (id_rsa) y nuestra clave pública (id_rsa.pub) bajo el directorio /home/user_a/.ssh/. 
  • Ambas claves están encriptas con el algoritmo de tipo RSA y con un tamaño de 2048 bits. 
  •  La clave privada no la compartimos con nadie y valga la redundancia "la mantenemos oculta bajo siete llaves".

2) Compartiendo Clave Publica con host remoto


Ahora vamos a compartir la clave publica que acabamos de generar con el host remoto host_b.

Ejecutamos lo siguiente en el host local (host_a):

[user_a@host_a ]# ssh-copy-id -i /home/user_a/.ssh/id_rsa.pub user-b@host_b

  • Con lo anterior le enviamos al host remoto host_b nuestra clave publica.
  • Con la opción -i indicamos donde esta nuestra clave publica.
  • La clave publica quedara en el host remoto en el archivo con nombre authorized_keys, si este archivo no existe se creará automáticamente.
Al ejecutar ssh-copy-id se nos pedirá la password del usuario en el host remoto, la cual tenemos que ingresar solo esta vez para poder copiar la clave publica.

Si todo resulta bien obtendremos la siguiente salida en pantalla:
Now try logging into the machine, with "ssh 'user_b@host_b'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

3) Probando conexión ...


Ahora solo queda probar la conexión SSH sin password al host remoto.

REFERENCIA


Desde la linea de comandos:
man ssh-keygen
man ssh-copy-id

Saludos a los que visiten este blog!!

No hay comentarios:

Publicar un comentario