Warning: Trying to access array offset on value of type bool in /var/www/html/sysadminsdecuba/wp-content/themes/mh-magazine-lite/includes/mh-custom-functions.php on line 144
Warning: Attempt to read property "post_title" on null in /var/www/html/sysadminsdecuba/wp-content/themes/mh-magazine-lite/includes/mh-custom-functions.php on line 144
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!
Dejar una contestacion