FlowingDev

Claves SSH, explicadas: tu pasaporte digital al servidor

Aprende cómo las claves SSH ofrecen autenticación segura y sin contraseñas para acceder a servidores remotos usando la magia de la criptografía de clave pública.

Probar la herramienta: Generador de Claves SSH

En una frase

Las claves SSH son un par de archivos criptográficos que van juntos —uno privado y secreto, y otro público y compartible— que te permiten demostrar tu identidad a una computadora remota sin escribir una contraseña.

El problema que resuelve

En los albores de internet, si querías administrar un servidor remoto, usabas algo como Telnet. Escribías tu nombre de usuario y contraseña, y estos viajaban por la red en texto plano para que cualquiera los viera. Era el equivalente digital a gritar el PIN de tu tarjeta en una habitación llena de gente. ¡Auch!

Luego llegó SSH, el Secure Shell. Cifraba toda la conversación, lo que fue un salto monumental. Ahora podías escribir tu contraseña y esta se enviaba cifrada de camino al servidor. ¡Mucho mejor! Pero las contraseñas siguen teniendo problemas. Pueden ser débiles, olvidadas, adivinadas o descifradas por fuerza bruta. Gestionar contraseñas para docenas de servidores y para todo un equipo de desarrolladores se convierte en una pesadilla logística y de seguridad. ¿Quién tiene acceso a qué? ¿Qué pasa cuando alguien deja la empresa? ¿Cambias la contraseña en 50 servidores y le dices la nueva a todo el mundo?

Este es el problema para el que se diseñaron las claves SSH. Reemplazan "algo que sabes" (una contraseña) con "algo que tienes" (una clave privada). Este método, llamado autenticación de clave pública, es drásticamente más seguro y muchísimo más conveniente tanto para humanos como para sistemas automatizados. Es la diferencia entre tener una única llave maestra fácil de robar y tener una tarjeta de acceso única con bloqueo biométrico para cada puerta que necesites abrir.

Cómo funciona por dentro

La magia detrás de las claves SSH es un concepto llamado criptografía asimétrica. A diferencia de una simple contraseña (que es un secreto simétrico —tú y el servidor saben lo mismo—), un par de claves SSH consiste en dos claves distintas pero matemáticamente vinculadas.

El par de claves pública-privada: una historia de amor desigual

Imagina que tienes un candado mágico y una única llave. El candado es tu clave pública. Puedes hacer un millón de copias de este candado y dárselas a quien quieras. Puedes publicarlo en tu sitio web, enviarlo por correo a tus amigos y ponerlo en cada servidor al que quieras acceder. Es público; no hay problema si se filtra.

Tu clave privada es la única llave que puede abrir esa marca específica de candado. Proteges esta clave con tu vida. La guardas en tu computadora, nunca la compartes e idealmente la proteges con una passphrase.

  • La Clave Privada puede crear una firma digital.
  • La Clave Pública puede verificar que una firma fue hecha por su correspondiente clave privada.

Y lo más importante: la clave pública no puede usarse para descifrar la clave privada. La relación matemática solo funciona en una dirección, de ahí lo de "asimétrica".

El "apretón de manos" de la autenticación

Entonces, ¿cómo funciona esto cuando intentas iniciar sesión? Digamos que escribes ssh user@server.com.

  1. La presentación: Tu computadora (el cliente) toca la puerta del servidor. "Hola, me gustaría iniciar sesión como user. Creo que reconocerás mi clave pública. Aquí está su ID".
  2. El desafío: El servidor busca en el archivo ~/.ssh/authorized_keys del usuario user. Este archivo es solo una lista de claves públicas que tienen permiso para iniciar sesión como ese usuario. El servidor encuentra una clave pública que coincide. "¡Ah, veo tu candado público! Te creo, pero necesito una prueba. Para demostrar que tienes la clave privada, por favor, firma este mensaje aleatorio de un solo uso que acabo de inventar: R2-D2_is_the_true_hero."
  3. La firma: Tu cliente recibe el desafío. Usa tu clave privada para crear una firma digital única para ese mensaje específico. Luego, envía esta firma de vuelta al servidor. Tu clave privada en sí nunca, jamás, sale de tu computadora.
  4. La verificación: El servidor recibe la firma. Toma la clave pública que tiene guardada y la usa para verificar la firma contra el mensaje de desafío original. Como solo tu clave privada podría haber producido esa firma exacta para ese mensaje exacto, el servidor sabe que está hablando contigo.
  5. Acceso concedido: Las matemáticas cuadran. El servidor dice: "La firma es válida. ¡Bienvenido!" y te concede una sesión de shell, todo sin que una contraseña cruce la red jamás.

Tipos de claves: un retrato familiar (RSA, ECDSA, Ed25519)

No todas las claves son iguales. Usan diferentes algoritmos matemáticos para generar los pares de claves y las firmas. Comúnmente verás tres tipos principales:

Algoritmo En qué consiste Tamaño de clave (típico) Veredicto
RSA La vieja guardia. Basado en la dificultad de factorizar números primos enormes. 2048 o 4096 bits Sigue siendo fuerte y ampliamente compatible, pero es lento y requiere claves grandes para los estándares modernos.
ECDSA El estándar moderno. Usa matemáticas de curva elíptica para ser más pequeño y rápido. 256 o 384 bits Gran opción. Una clave ECDSA de 256 bits ofrece una seguridad similar a una clave RSA de 3072 bits.
Ed25519 La nueva sensación. Un tipo específico de clave de curva elíptica que es aún más rápido. 256 bits La mejor opción si es compatible. Rápido, seguro y diseñado para resistir ciertos ataques.

Hoy en día, Ed25519 es generalmente la opción recomendada por su rendimiento y seguridad superiores.

¿Qué es un "fingerprint"?

Una clave pública es una cadena de caracteres larga y fea. No es algo que puedas recordar o comparar fácilmente. Un fingerprint (o huella digital) es un resumen corto y único de la clave pública, creado al pasar la clave por una función de hash (como SHA256).

SHA256:88+EM65U024w0E7sF2w8w3n98w/L3t8d7f6e5g4h

Actúa como un número de serie legible por humanos. Cuando te conectas a un servidor por primera vez, SSH te mostrará el fingerprint de la clave pública del servidor y te preguntará si confías en él. Esta es tu única oportunidad para prevenir un ataque de "man-in-the-middle" verificando ese fingerprint a través de otro canal seguro (como llamar al sysadmin y leérselo).

Historias del mundo real

El script de despliegue automatizado

Una ingeniera DevOps, Maya, administraba una flota de 20 servidores web. Cada vez que desplegaba una nueva versión de la app de la empresa, su script tenía que iniciar sesión en cada servidor para descargar el último código y reiniciar el servicio. Su script inicial le pedía la contraseña del servidor 20 veces seguidas, lo cual era desesperantemente lento. Su siguiente versión tenía la contraseña escrita directamente en el script, lo que hizo que a su CISO le diera un tic en el ojo. Finalmente, generó un único par de claves SSH dedicado para los despliegues. Añadió la clave pública a los 20 servidores. Ahora, su script se ejecuta sin problemas y de forma segura, iniciando sesión en cada máquina en segundos sin ninguna intervención manual.

Lección: Las claves SSH son la piedra angular de la automatización segura y sin contraseñas.

El contratista que se va

Una pequeña startup contrató a un freelancer, David, para un proyecto de tres meses. Para darle acceso al servidor de pruebas, el líder técnico, Chen, simplemente le pidió su clave pública SSH y la añadió al archivo authorized_keys del servidor. David ahora podía iniciar sesión de forma segura y hacer su trabajo. Al final del contrato, todo el proceso de "offboarding" de Chen para el acceso al servidor consistió en un solo comando: abrir el archivo authorized_keys y eliminar la línea que contenía la clave de David. El acceso fue revocado de forma instantánea y limpia, sin contraseñas compartidas que cambiar o de las que preocuparse.

Lección: Las claves SSH proporcionan un control de acceso granular, auditable y fácilmente revocable por usuario.

El primer "git push" a GitHub

Un nuevo desarrollador, Sam, acaba de unirse a un equipo y clonó su repositorio de código privado. Después de hacer su primer cambio, intentó hacer git push. Se encontró con un error de "Permission denied". La empresa, como muchas, había desactivado la autenticación con contraseña en GitHub por seguridad. La wiki interna le indicó que generara una nueva clave SSH, luego fuera a su configuración de GitHub y pegara el contenido de su clave pública (id_ed25519.pub) en la sección "SSH and GPG keys". Después de eso, pudo subir su código usando la URL SSH del repositorio (git@github.com:...). GitHub estaba usando exactamente el mismo mecanismo de desafío-respuesta para verificar que realmente era Sam quien subía el código.

Lección: Las claves SSH son el estándar para autenticarse en servicios más allá del simple acceso a la shell, incluyendo la mayoría de las plataformas de alojamiento de código.

Errores y trampas comunes

  • Compartir tu clave privada. Nunca, jamás de los jamases envíes tu clave privada (id_ed25519 o id_rsa) a nadie ni la subas a ningún sitio. Es tu secreto. Compartirla anula por completo el propósito de este modelo de seguridad.
  • Olvidar la passphrase. Tu clave privada es solo un archivo en tu disco. Si te roban el portátil, un atacante puede simplemente copiarla. Una passphrase fuerte cifra este archivo, requiriendo que el ladrón descifre tanto la contraseña de tu portátil como la passphrase de tu clave. Es una capa de defensa crítica.
  • Pegar la clave privada en el campo de la clave pública. Es un error fácil de cometer. Estás configurando un nuevo servicio, te pide tu clave pública y accidentalmente copias y pegas el contenido del archivo incorrecto. Siempre verifica dos veces que la clave que estás compartiendo termina en .pub.
  • Usar claves viejas y débiles. Generar una clave RSA de 1024 bits en estos tiempos es una mala idea. Son potencialmente vulnerables a ser descifradas por atacantes con buenos recursos. Quédate con los estándares modernos: Ed25519 o al menos una clave RSA de 4096 bits.
  • Escribir "yes" sin pensar. La primera vez que te conectas a un nuevo host, SSH te advierte que la autenticidad del host no puede ser establecida y te muestra su fingerprint. No lo aceptes a ciegas. Este es el momento en que puede ocurrir un ataque de "Man-in-the-Middle". Verifica el fingerprint a través de otro canal si estás en una red no confiable.

Por qué debe estar en tu radar

Si eres desarrollador, sysadmin, ingeniero DevOps o cualquiera que necesite iniciar sesión en una computadora remota, las claves SSH no son solo un "nice-to-have", son fundamentales. Son la forma profesional, segura y eficiente de gestionar el acceso a las máquinas.

Deberías pensar en las claves SSH cuando:

  • Estás configurando un nuevo servidor (en la nube o local).
  • Estás escribiendo cualquier script que necesite conectarse a otra máquina (scp, sftp, rsync, git).
  • Estás configurando el acceso para un nuevo miembro del equipo.
  • Te estás conectando a GitHub, GitLab o Bitbucket.
  • Quieres dejar de escribir contraseñas.

Aprender a usar claves SSH es un rito de iniciación que te lleva de ser un usuario casual de máquinas remotas a un operador competente.

Profundiza más

Teoría lista. Hora de ensuciarse las manos — 100% en tu navegador.

Probar la herramienta: Generador de Claves SSH