#Sysadmin – Administrar múltiples llaves #SSH

openssh-securid

Llaves SSH: el concepto

SSH es un protocolo de inicio de sesión remota que ha sido la base de la seguridad de GNU/Linux (BSD y los UNIX en general) durante décadas, una de las características más importantes consiste en evitar la necesidad de usar usuario-contraseña para la autenticación, sino un sistema de llaves SSH pública-privada basado en el algoritmo RSA, con esto, mi equipo (y solo mi equipo) tiene acceso “sin contraseña” al host, pues se identifica usando una clave RSA.

Ahora bien, en un mundo cada vez más ávido de seguridad, casi todo lo que tenga que ver con datos (y especificamente con acceso a servidores) requiere llaves SSH, por ejemplo, github las requiere, bitbucket, Amazon otorga llaves para acceder a cada equipo, etc.

¿Cómo hacer para gestionar diferentes llaves SSH en un mismo equipo?

Cuando tenemos múltiples llaves SSH instaladas, es un fastidio tener que indicarlas cada vez en el comando SSH:

ssh -i ~/.ssh/xxx_id_rsa user@host

Deseo que podamos acceder claramente a nuestro equipo sin tener que indicar la llave RSA.

He acá el truco …

Configurando SSH

Debemos configurar SSH para que acepte una configuración especifica por cada host y/o conexión que requerirá su propia llave SSH.

Para dar un ejemplo, tengo 2 llaves privadas, una que me proporciona un servidor de Amazon AWS y otra, que generé con ssh-keygen para conectarme a github, dichas llaves son diferentes.

El primer paso es crear un archivo “config” dentro de nuestro directorio “.ssh” (ese directorio es por usuario).

vim ~/.ssh/config

Allí agregamos:

Host github.com
 HostName github.com
 PreferredAuthentications publickey
User phenobarbital
 IdentityFile ~/.ssh/id_rsa.github

Y paso a explicar:

Host: nombre “amigable” con el cual identificaremos el host en el comando ssh, puede ser cualquier cosa que nos ayude a memorizar su nombre (no tiene que ser ni el hostname ni la IP real)

Hostname: Esta si es la IP o nombre de host real del equipo al que me voy a conectar.

User: El único usuario con el que iniciaré sesión en ese host, en este caso, mi ID de github.

IdentityFile: Es la llave (que generé con SSH-KEYGEN y subí a github) con la que hago mis commits a github.

Guardo, aplico los permisos al archivo config y a la llave privada:

chmod 0600 /home/armandof/.ssh/id_rsa.github
chmod 0600 ~/.ssh/config

Y seguido de una línea nueva, agrego la siguiente definición de host:

vim ~/.ssh/config
Host server
 HostName armandof.cu.cc
 User armandof
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/id_rsa.blog

Aplico los mismos permisos 0600 al archivo id_rsa.blog y listo!

Intenten hacer un:

ssh -l armandof server

Y entrará sin pedir clave usando la llave privada que le hemos configurado.

Notas

  • Pueden indicar varias llaves privadas, repiten (una por línea) y openSSH intentará una por una:
Host me.github.com
 HostName github.com
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/id_rsa.github
 IdentityFile ~/.ssh/id_rsa
 IdentityFile ~/.ssh/id_rsa.2
  • Pueden indicar que intente con la llave SSH y si falla, que intente con password (o cualquier otro método alternativo de autenticación, por ejemplo gssapi)
PreferredAuthentications publickey,password
  • Si al servidor se accede por un puerto distinto, indicar en la configuración con la opción “Port”, ejemplo:
Host example.com
 HostName server.example.com
 User armandof
 Port 50222
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/id_rsa.2
  • Si desean que estos hosts estén declarados “system-wide” (para todos los usuarios) entonces deberán definirlos en el archivo:
/etc/ssh/ssh_config

Happy Hacking! y ¡Ya sabes como!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*