Idioma
Categoría
Buscar

Qué son las claves SSH y cómo utilizarlas para sustituir su contraseña

Aprender a generar el par de claves pública y privada, comprender sus funciones y los algoritmos RSA y Ed25519. Cómo copiar la clave en el servidor y autorizar la conexión sin contraseña

En Terminal Por Rudi Drusian Lange
Publicado el
Última actualización

Información Instantánea

Si ya sabes lo que estás haciendo y sólo necesitas recordar los comandos:

Shell

# Crea las claves utilizando el algoritmo ed25519
ssh-keygen -t ed25519

# Transfiere la clave al servidor
ssh-copy-id usuario@servidor_remoto

Si quiere entender lo que está haciendo, lea el texto siguiente.

Las claves SSH son credenciales de autenticación

Las claves, que forman parte del protocolo SSH, utilizan la tecnología denominada PKI (infraestructura de clave pública), que es un estándar de autenticación y cifrado de gran prestigio utilizado por dispositivos y usuarios como identidad virtual en la red digital.

Las claves se crean por pares, una clave pública que se comparte con el servidor remoto y una clave privada que se almacena en el ordenador local. En una nueva conexión, la clave privada se proporciona en el ordenador local y el servidor remoto la comprueba utilizando la clave pública.

Se utilizan diferentes algoritmos para crear claves de autenticación, dos de los más comunes son:

  • RSA - Altamente seguro, tiene un tamaño de 2048 o 4096 bits y mantiene una mayor compatibilidad con sistemas operativos antiguos.
  • Ed25519 - Un estándar más reciente que proporciona el mismo nivel de seguridad y eficacia que las claves RSA, pero con un tamaño de clave menor, de 256 bits. Su uso ha aumentado en diversas plataformas.

Generación del par de claves

Este artículo demostrará la creación de una clave Ed25519, pero también puede seguirse para generar una clave RSA.

Shell

ssh-keygen -t ed25519

Generating public/private ed25519 key pair
Enter file in which to save the key (/home/usuario/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/usuario/.ssh/id_ed25519
Your public key has been saved in /home/usuario/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:NWi5nmnJ/wAji+J1tUH2go2qO1Pou3MjY0Ivyirzz04 usuario@hostlocal
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|         o       |
|        * o      |
|       B + .     |
|   .  + S .      |
| .. .o * X       |
|..o.E o O .      |
|=oOBo. . . .     |
|**O&+.    ...    |
+----[SHA256]-----+

Se le preguntará dónde almacenar la clave, pulse para mantener la ruta predeterminada. Se le pedirá una contraseña (passphrase) y para confirmarla, puede pulsar y dejarla en blanco. En este caso será posible conectarse al servidor remoto desde la máquina local en la que se crearon las claves, sin introducir contraseña.

La passphrase es una contraseña para la clave privada y sólo difiere del significado tradicional de la palabra contraseña porque se utiliza para generar el cifrado de la clave. Se fomenta su uso porque ofrece una segunda capa de protección, ya que no basta con que alguien tenga acceso a la clave privada sin conocer la contraseña.

La decisión de utilizarla o no depende del entorno en el que se utilizarán las claves. En un ordenador al que sólo tenga acceso una persona, puede ser más seguro no utilizar la contraseña que en un lugar en el que otras personas puedan utilizarla.

Más del 90% de las claves creadas en las grandes empresas no utilizan una passphrase, lo que permite automatizar los procesos sin interacción humana. Se establecen políticas de acceso para aumentar la seguridad.

Las claves se crean por defecto en la carpeta .ssh/ dentro del home del usuario, la clave llamada id_ed25519 es la privada y debe mantenerse en secreto mientras que la clave llamada id_ed25519.pub es la pública que puede compartirse con el servidor remoto.

Transferencia de la clave al servidor remoto

En el ejemplo siguiente, el parámetro -p se utiliza para indicar un puerto alternativo y -i para señalar la ruta de la clave pública. Estos parámetros pueden omitirse para utilizar las opciones por defecto.

ssh-copy-id -p porta_ssh -i ~/.ssh/id_ed25519.pub usuario@servidor_remoto

ssh-copy-id: INFO: Source of key(s) to be installed: "/home/usuario/.ssh/id_ed25519.pub"
ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
usuario@servidor_remoto's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh -p 'puerto_ssh' 'usuario@servidor_remoto'"
and check to make sure that only the key(s) you wanted were added.

Se solicitará la contraseña del usuario en el servidor remoto para transferir la clave pública. Si aparece la línea Number of key(s) added: 1, significa que la clave se ha añadido correctamente.

Con la clave pública instalada, la contraseña para el acceso remoto al servidor a través de SSH ya no se solicitará en el inicio de sesión ni para las transferencias de archivos mediante los comandos scp o rsync. Si se utilizó una contraseña para crear la clave, deberá utilizarse con cada conexión.

Es posible guardar la contraseña en un archivo para no tener que introducirla cada vez que te conectes, pero esto anula el propósito de tener una contraseña, ya que también será visible en caso de intrusión.

Prueba de acceso al servidor remoto:

ssh usuario@servidor_remoto

La clave SSH se utiliza como credencial en lugar de una contraseña.

Concluyendo

El uso de claves SSH es muy interesante, ya que puede permitir la automatización en diversas situaciones, como una copia de seguridad sin interacción humana y con un tiempo programado entre servidores. También aumenta la seguridad al fomentar el uso de contraseñas más robustas, ya que no hay que introducirlas cada vez que se inicia sesión.

Fuentes

Este no es mi idioma original y no lo hablo muy bien. Utilicé mis pocos conocimientos y herramientas de traducción para redactar el texto de este artículo. Disculpe los posibles errores ortográficos o gramaticales, se agradecen sugerencias de correcciones y se pueden enviar al correo electrónico de contacto que se encuentra en el pie de página del sitio. Mi intención es compartir algunos conocimientos y espero que esta traducción sea lo suficientemente buena.