miércoles, 28 de febrero de 2018

Claves Privadas y Publicas para SSH, Correo y demás

Bien, una vez mas y como siempre, escribo esta pequena explicación primero para mi mismo, y luego para el que le sirva de algo.

Las conecciones remotas a través de el protocolo SSH se pueden facilitar obviando el usuario y la contraseña usando sistemas de validacion asimetrica.

Esta validación se fundamenta en la creación de dos claves encriptadas, una privada que solo tendrá el dueño del mensaje o la conección y una pública que tendran los destinatarios de correo o las computadoras remotas.

El principio es practicamente el mismo para SSH y para los correos autentificados.

Primero que nada el usuario (x-man) que desee conectarse por SSH con Claves debe generar esas claves en el Cliente (aqui x-man-pc). Para esto usara en sistemas niXs una herramienta llamada ssh-keygen.

x-man-pc:~ x-man$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/x-man/.ssh/id_rsa):
Created directory '/Users/x-man/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/x-man/.ssh/id_rsa.
Your public key has been saved in /Users/x-man/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:G8M+S4PG5MfdWmbntaRnptl3KBgnpV2HdBoS8L1mJ8w X-man@x-man-pc.local
The key's randomart image is:
+---[RSA 2048]----+
|          ....   |
|           ...o .|
|            .o.= |
|       .    .o+..|
|      . S  + .E..|
|     + + =+.oo o |
|      = O .== .o.|
|     . o +.=.o*=+|
|        . .  =*oo|
+----[SHA256]-----+


Esto significa que ssh-keygen va a crear un par de claves publica/privada y las va a guardar (por defecto) en la carpeta (Escondida por . ) de usuario con el nombre id_rsa

Ahora ssh-keygen ha creado una nueva carpeta y dentro estan las dos claves.

Y cuando quiero conectarme por ssh...

este fingerprint (arriba) es lo mismo que esta guardado en ir_dsa.pub, es sólo otra formato, para verlo como fingerprint otra vez, debemos ejecutar:
 
x-man-pc:.ssh x-man$ ssh-keygen -l -f id_rsa.pub
2048 SHA256:G8M+S4PG5MfdWmbntaRnptl3KBgnpV2HdBoS8L1mJ8w x-man@x-man-pc.local (RSA) 
 
cambiar la Paraphase:
ssh-keygen -p -f ~/.ssh/id_dsa

Tipos de claves:
ecdsa = 256
dsa = 1024
rsa = 2048 
 
Importante:
Si el cliente pregunta "password"  3 veces antes de ejecutar la conneccion ssh, y luego conecta sólo poniendo un usuario existente en el servidor-ssh es porque la clave publica no se ha exportado al servidor, para esto ejecutamos:


sudo ssh-copy-id -i ~/.ssh/id_rsa.pub administrator@192.168.148.136

donde administrador va a ser el usuario que va a poder entrar con esa clave sin importar el nombre que tenga en el cliente. Es el nombre antes de @nombrehost. Tiene que existir en el Servidor

Si todavia para exportar la clave pregunta por 3 veces por la clave del administrador, puede ser que el acceso sobre ssh esta impedido para el root

Mas Informacion:
https://www.freebsd.org/doc/de_DE.ISO8859-1/books/handbook/openssh.html
http://manpages.ubuntu.com/manpages/xenial/en/man8/sshd.8.html 
https://www.linuxtotal.com.mx/index.php?cont=info_seyre_010
https://www.linuxtotal.com.mx/index.php?cont=info_seyre_003
https://serverfault.com/questions/690855/check-the-fingerprint-for-the-ecdsa-key-sent-by-the-remote-host
https://blog.mellenthin.de/archives/2007/08/08/ssh-fingerprint-uberprufen/
https://apple.stackexchange.com/questions/254468/macos-sierra-doesn-t-seem-to-remember-ssh-keys-between-reboots

TIPPS:
Si tienes varias computadoras no necesitas generar una nueva Llave en cada una, lo causaria que el servidor tenga una lista grande de computadoras, claves publicas, etc. , es suficiente si copias las claves que ya tienes de computadora en compu. No confundas esto con ssh-copy-id. Esta copia la debes realizar manualmente por ejemplo con un usb-stick o por la red.

- En algunas Distribuciones de Linux viene el usuario root desactivado, si lo activas por ejemplo con 
sudo -u root passwd
puedes tener problemitas para logearte por ssh y hasta para exportar la clave. Esto es puede ser porque el ssh esta desactivado para root. Para esto te vas a /etc/ssh/sshd_config y agregas la linea:
PermitRootLogin yes

- Cuando copiamos unas claves en la carpeta .ssh de manera manual (con el explorador de archivos, finder, cp) los derechos se cambian a rwxrr o 644, lo que ssh reconocerá como riesgoso. Al probar la conexion aparece el mensaje:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/usuariox/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/usuariox/.ssh/id_rsa": bad permissions
root@servidor.com's password:


para reparar esto basta asignarle los permisos 600. Algunos Blogs dicen que el 400 funciona, cosa que a mi no me resulta puesto que me dice que no es accesible.