Guía Breve sobre ssh con clave pública
La autenticación por clave pública nos permite loguearnos a un host sin necesidad de ingresar usuario y contraseña.
Descripción del método
Nociones fundamentales
- El esquema se basa en criptografía de clave pública.
- Usamos claves separadas para cifrar y descifrar.
- Es imposible obtener la clave para descifrar a partir de la clave para cifrar
- Solamente el cliente sabe la clave privada.
Funcionamiento
-
Desde el lado del cliente ssh creamos un par de claves (una pública y otra privada).
- Cada clave se guarda en archivo separado.
- Tenemos la opción en este momento de cifrar su clave privada mediante una frase de paso. La clave privada queda inutilizable si olvidamos esa contraseña.
- Desde el lado cliente copiamos la clave pública agregándola al archivo
~/.ssh/authorized_keys
en su directorio de la máquina remota. - Luego de esto, el usuario puede loguearse sin proporcionar la contraseña.
- Cuando nos logueamos, el programa
ssh
le dice al servidor que par de claves le gustaría usar para autenticar. El cliente verifica que tiene acceso a la clave privada y el servidor verifica que la clave correspondiente está autorizada para aceptar la cuenta. - El servidor puede informarle al cliente los errores que impidan que la autenticación por clave pública se pueda usar exitósamente luego de que la autenticación se complete usando un método diferente.
- De manera predeterminada si falla el método por clave pública se usará otro método, como por ejemplo el de usuario y password.
Nota:La manera más conveniente de usar una clave pública es con un agente de autenticación que se encargue de guardar en memora las claves privadas descifradas y de esta manera evitar tener que ingresar una y otra vez la frase de paso correspondiente.
Archivos involucrados del cliente
Archivo | Descripción |
---|---|
/usr/bin/ssh | cliente ssh |
/usr/bin/ssh-keygen | Generador de par de claves (una pública y otra privada). Con la opción -t se puede especificar el algoritmo |
~/.ssh/known_hosts | claves públicas de los hosts a los que ya accedimos alguna vez |
~/.ssh/id_rsa | (nombre predeterminado con algoritmo RSA) |
~/.ssh/id_ecdsa | nombre predeterminado con algoritmo ECDSA |
~/.ssh/id_ed2551 | nombre predeterminado con algoritmo ED25519 |
Archivos involucrados del servidor
Archivo | Descripción |
---|---|
/usr/sbin/sshd | servidor ssh |
~/.ssh/authorized_keys | Clave públicas de clientes autorizados |
Formato de ~/.ssh/authorized_keys
El siguiente es un ejemplo de un archivo que contiene solamente dos claves pública:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb96oGSIMquG5UGR6aFXtX6aHboMDS3Pkr8NOuLskabSnSzgUC8IGYvxn86W0xvcWGdVD+Qljl6h16ARFXGpCNWSxktl7TWMnbDn i5AZaJXETV1ZkB5ro5f33gEvaMcZel18X1FcE1RBEJG92ufOoIIastxYo+THU8TW0bwVG08/hHcPn+d9YYEwZ92b/sTQH3rtcvLrAtsSmI8flVc0M054Tmkhf15fXuVlPeYwqYhCWBT1JGg60Jn3ZrsQvD6di0KRBuw0icfeF1mdHnHSlrb7AhcNFs+kds1acWaE3cOINuKJmDHPmsyT6+wujnOx+3TCGVhGC8hm/8dizkALwks/1Zt5T1R8o/erOu8NFfzG3NvOB9dx9szbAHOxKiJ61FH6qOIUGj74xMNNGmCszz57g3JG8gfFe+zc7tlrvXgBIj1ZyY16JC6LkbYjUb5aXJQRLIPSe8XoAJU+UkxTjuXU7lCGnMPH0DjvvgLgpZYlWtL8zGqdu+ruMOE0S2N8= root@dublin.ireland.home command="yum check-update" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb96oGSIMquG5UGR6aFXtX6aHboMDS3Pkr8NOuLskabSnSzgUC8IGYvxn86W0xvcWGdVD+Qljl6h16ARFXGpCNWSxktl7TWMnbDnCi5AZaJXETV1ZkB5ro5f33gEvaMcZel18X1FcE1RBEJG92ufOoIIastxYo+THU8TW0bwVG08/hHcPn+d9YYEwZ92b/sTQH3rtcvLrAtsSmI8flVc0M054Tmkhf15fXuVlPeYwqYhCWBT1JGg60Jn3ZrsQvD6di0KRBuw0icfeF1mdHnHSlrb7AhcNFs+kds1acWaE3cOINuKJmDHPmsyT6+wujnOx+3TCGVhGC8hm/8dizkALwks/1Zt5T1R8o/erOu8NFfzG3NvOB9dx9szbAHOxKiJ61FH6qOIUGj74xMNNGmCszz57g3JG8gfFe+zc7tlrvXgBIj1ZyY16JC6LkbYjUb5aXJQRLIPSe8XoAJU+UkxTjuXU7lCGnMPH0DjvvgLgpZYlWtL8zGqdu+ruMOE0S2N8= root@belfast.ireland.home
-
ssh-rsa
es el tipo de clave -
AAAAB3NzaC1yc2EAAAADAQABAAAegQCb96oGSIMquG5UGR6aFXtX6aHboMDS3Pkr8NOuLskabSnSzgUC8IGYvxn86W0xvcWGdVD+Qljl6h16ARFXGpCNWSxktl7TWMnbDnCi5AZaJXETV1ZkB5ro5f33gEvaMcZel18X1FcE1RBEJG92ufOoIIastxYo+THU8TW0bwVG08/hHcPn+d9YYEwZ92b/sTQH3rtcvLrAtsSmI8flVc0M054Tmkhf15fXuVlPeYwqYhCWBT1JGg60Jn3ZrsQvD6di0KRBuw0icfeF1mdHnHSlrb7AhcNFs+kds1acWaE3cOINuKJmDHPmsyT6+wujnOx+3TCGVhGC8hm/8dizkALwks/1Zt5T1R8o/erOu8NFfzG3NvOB9dx9szbAHOxKiJ61FH6qOIUGj74xMNNGmCszz57g3JG8gfFe+zc7tlrvXgBIj1ZyY16JC6LkbYjUb5aXJQRLIPSe8XoAJU+UkxTjuXU7lCGnMPH0DjvvgLgpZYlWtL8zGqdu+ruMOE0S2N8=
es la clave pública codificada en base64 -
root@dublin.ireland.home
es un comentario opcional -
command=yum check-update
en la segunda línea restringe el acceso permitiendo la ejecución de un único comando. - El contenido de este archivo debería tener permisos 0600 y el directorio
~/.ssh
0700.
Comentarios
Comments powered by Disqus