Autentificación mediante claves públicas en SSH

¿Qué son las claves públicas?

Wikipedianetworking

En criptografía, se denomina una infraestructura de clave pública a una combinación de hardware, software y procedimientos de seguridad que permiten la ejecución con garantías de operaciones criptográficas como el cifrado, la firma digital o el no rechazo de transacciones electrónicas. Para un correcto funcionamiento es necesario que intervengan las siguientes partes:

  • Un usuario iniciador de la operación.
  • Sistemas servidores que dan ocurrencia de la operación y garantizan la validez de los certificados implicados en la operación.
  • Un destinatario de los datos cifrados/firmados/enviados garantizados por parte del usuario iniciador de la operación.

¿Qué objetivo nos marcamos?

El propósito de usar la autentificación mediante claves públicas es sacar el mayor partido posible a SSH mediante el uso de clave privada y pública. De forma que al compartir esta última con el servidor, podamos identificarnos automáticamente, sin necesidad de utilizar el esquema clásico de usuario y contraseña, al que estamos acostumbrados.

¿Qué algoritmos de cifrado usar?

SSH permite usar los algoritmos RSA y DSA, pero… ¿cuál de ellos nos conviene más?

  • RSA – Es un algoritmo asimétrico cifrador de bloques, que utiliza una clave pública, la cual se distribuye y otra privada, guardada en secreto por su propietario.Su funcionamiento reside en el uso de expresiones exponenciales dentro de la aritmética modular. Obteniendo una completa seguridad, debido a que aún no se conocen formas óptimas de factorizar  un número grande en sus factores primos utilizando ordenadores personales.El RSA se basa en dos problemas matemáticos: el problema de factorizar números grandes y el problema RSA. El descifrado completo de un texto cifrado con RSA es computacionalmente intratable.
    Por otro lado la factorización de números grandes proponen métodos para longitudes de 600-700 bits de longitud. Y generalmente, las claves RSA usan entre 1024-2048 bits.
  • DSA – (Digital Signature Algorithm o Algoritmo Estándar de Firmado) es el algoritmo de firmado digital incluido en el DSS (Digital Signature Standard o Estándar de Firmas Digitales) del NIST Norteamericano. Está basado en el problema de los logaritmos discretos y únicamente puede emplearse para las firmas digitales. A diferencia del RSA, que puede emplearse también para encriptar.La elección de este algoritmo como estándar de firmado generó multitud de críticas puesto que perdía bastante flexibilidad respecto al RSA.

La diferencia entre ambos reside en los tiempos obtenidos para la generación, firmado y comprobación de las claves públicas. Usando este benchmark (podéis usar cualquier IDE con la última versión del JDK) se obtuvieron los siguientes tiempos:

Algoritmo

Generación de llaves * 1(ms.)

Firmado * 100 (ms.)

Verificación*100(ms.)

RSA 512 544.61 915 160
RSA 1024 1120.46 4188 263
DSA 512 6.62 634 988
DSA 1024 17.87 1775 3397

El algoritmo DSA es más rápido para generar la firma que para verificarla, al contrario de lo que sucede con RSA. Por lo que para realizar la autentificación en nuestro servidor SSH usaremos este último.

Además, si comparamos el tamaño de las llaves generadas por ambos algoritmos, comprobaremos cómo las utilizadas por RSA son superiores a las de DSA.

Dicho esto, usaremos RSA.

Configuración del servidor

Comprobamos si el equipo donde tenemos instalado sshd tiene activada la versión 2 del protocolo SSH y que esté habilitada la opción para utilizar claves RSA. Para ello buscamos las siguientes directivas en el fichero /etc/ssh/sshd_config:

Protocol 2
RSAAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Para cada usuario que vaya a conectarse, debe existir el directorio /home/usuario/.ssh y en él el archivo authorized_keys. En caso de no ser así deberemos crearlo de forma manual y posteriormente iniciar el servidor.

cd ~
mkdir .ssh
touch .ssh/authorized_keys
sudo /etc/init.d/sshd start

Generación de los pares de claves RSA

Como antes comentamos, SSH nos permite generar indistintamente claves RSA o DSA (en nuestro caso usaremos la mencionada en primer lugar), creándose para ambas una clave pública y una clave privada.

Dichas claves, pueden generarse en el propio servidor, en el ordenador cliente, o en cualquier otra máquina.

Al final sólo la clave pública debe aparecer en el fichero .ssh/authorized_keys del servidor al que queremos conectarnos.

El usuario interesado en generar el par de claves usará ssh-keygen. En el proceso, se nos pedirá introducir un passphrase, lo que viene a ser una contraseña para poder generar unas claves más fuertes y seguras.

En nuestro caso, vamos a usarla y a explicar posteriormente como indicarle al sistema que sólo nos la pida una vez por sesión, y no cada vez que nos autentifiquemos en el sistema.

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sebas/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sebas/.ssh/id_rsa.
Your public key has been saved in /home/sebas/.ssh/id_rsa.pub.
The key fingerprint is:
63:de:92:6d:00:fa:d9:17:55:45:ce:bc:25:42:8b:4c sebas@TheWorkstation
The key's randomart image is:
+--[ RSA 2048]----+
| E . .oo|
| o o o + |
| . o + . =|
| . . . . .o|
| . S . . |
| . = * . |
| o = = |
| + |
| |
+-----------------+

El anagrama que produce esta versión de ssh-keygen, se denomina randomart y se trata de una representación visual de la huella

Notebookcheck- AMD ATI Mobility Radeon HD 4570_1245224146636

digital de nuestra clave, para que sea más legible para el ojo humano y para dispositivos ópticos.

Si lo deseas, puedes usar la herramienta visprint que a través de técnicas de fractales, te permitirá obtener otro tipo de randomart.

Instalación de clave pública y protección de la clave privada

Para validar todo este proceso es necesario colocar nuestra clave pública en el servidor donde tenemos pensado autentificarnos.

Existen varias posibilidades de hacerlo, una de ellas es por ejemplo hacer uso del siguiente comando (Cliente):

[usuario1@localhost usuario1]$ ssh usuario @host_remoto \'cat >> .ssh/authorized_keys' < .ssh/id_dsa.pub

Con este comando añadimos directamente la clave al fichero authorized_keys del servidor remoto de forma automática, ahorrándonos así un poco de trabajo.

También podemos usar (Cliente):

$ ssh-copy-id usuario_remoto@host_remoto

Pero ya que estamos haciendo todo con paso firme y decidido, continuemos haciendo las cosas con buen pie. Así que vamos a usar el comando scp, que trae incluido OpenSSH para hacer una transacción de ficheros entre el cliente y el servidor remoto de la forma más segura posible. Así que usaremos la siguiente orden (Cliente)

$ cd ~/.ssh
$ scp id_rsa.pub usuario@host_remoto/

Recuerda que la clave pública debe ser incluída en el fichero ~/.ssh/authorized_keys de cada máquina donde queramos usar dicha autentificación.

Ahora que ya tenemos la clave pública en el servidor, falta añadirla al fichero authorized_keys de éste (algo que comentamos anteriormente que se podría conseguir de forma directa utilizando el primer comando) (Servidor).

$ cd ~/.ssh
$ cat id_rsa.pub >> authorized_keys
$ shred -v  --remove id_rsa.pub

Conclusión

Si has realizado correctamente todos los pasos que se han ido indicando, ahora podrás conectarte a tu servidor SSH (Si no tienes uno, visita ésta entrada donde te explicamos cómo montar uno) sin necesidad de identificarte, tan sólo haciendo uso de las claves RSA que has generado.

También puedes incrementar un poco la seguridad modificando las siguientes directivas de tu fichero de configuración sshd_config:

PasswordAuthentication no
PermitRootLogin no

Con las que impedirás la conexión como administrador y la autentificación mediante password para los usuarios.

Anuncios

  1. malditonerd

    Muy bien explicado. Colaboro avisándo que hay un errorcito en donde dice: “Para validar todo este proceso es necesario colocar nuestra clave privada (<– pública) en el servidor donde tenemos pensado autentificarnos"

    ¡Saludos!

  2. Gracias por el aviso, ¡ya está arreglado!. Me alegro de que te pases por aquí.

    Un saludo.

  3. k onda esta bueno tu blog.
    y buena entrada, te invito al mio

    Editado: Con la URL que pones en el comentario, es suficiente, no es necesario hacer tanto SPAM 🙂

    Te espero..

  4. AlbertoVeo5

    Ea diablo, que buen MANUAL. INCREIBLE, rula que no veas, testeado en Debian 5 🙂 super bien el manual.

  5. Hola,

    una consulta….. necesito conectarme por ssh a una ups sin ingresar pass.. que sea automatico el login…. ésta no admite certificados…. se puede hacer de alguna manera la conexion automatica??

    de manera que cuando escriba el comando le pase con el mismo la pass?? algo asi como ssh – password xxx user@upc.remota ??

    saludos!!

  6. M. Cristina

    Estimado

    Cuando vuelvo a iniciar sesión en la máquina que tengo como servidor y quiero realizar una consulta a otra máquina me vuelve a solicitar la passphrase, esto debe ser así? o que debo hacer para que no me solicite la passphrase cada vez que me reconecto?

    Gracias

  7. Marcelo

    Impecable ya generé las keys y puse la publica en el .ssh/authorized_keys del usuario primario de un server e ingresé desde mi PC por SSH sin que me pidiera el pass…

    Te felicito por el tutorial.

  8. XF2012

    Muchas gracias por este gran articulo. Justo lo que necesito.

  9. Luis Diaz

    Tengo problemas con esta conexion.
    La estuve usando varios dias sin problemas y ahora me muestra este error. ¿Como lo soluciono?

    pledn@uneplteuas1> ssh admin@10.55.102.124
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    It is also possible that the RSA host key has just been changed.
    The fingerprint for the RSA key sent by the remote host is
    75:f6:a8:5c:2c:0d:20:a5:c8:ed:04:fd:2e:39:51:d2.
    Please contact your system administrator.
    Add correct host key in /home/opledn/.ssh/known_hosts to get rid of this message.
    Offending key in /home/opledn/.ssh/known_hosts:62

    RSA host key for 10.55.102.124 has changed and you have requested strict checking.

    Gracias por su colaboracion.

  1. 1 RSA,SHA1.MD5 | Investigaciones y Màs

    […] https://linuxcode.wordpress.com/2009/08/08/autentificacion-mediante-claves-publicas-en-ssh/ […]

  2. 2 ARTÍCULO -College Readiness and College Video & Soundcloud – Root Experience

    […] https://linuxcode.wordpress.com/2009/08/08/autentificacion-mediante-claves-publicas-en-ssh/ […]




Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s



A %d blogueros les gusta esto: