OpenSSH 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.

Llaves

unsplash-logo CMDR Shane

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.
    • 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.

Fuentes y más recursos

Comentarios

Comments powered by Disqus