Claves SSH: configura SSH sin contraseña paso a paso en Linux

Claves SSH: configura SSH sin contraseña paso a paso en Linux
Claves SSH: configura SSH sin contraseña paso a paso en Linux
Nivel: Intermedio | Tiempo: 15 min | 🖥 Sistema: Linux / macOS / Windows (WSL)

Configurar claves SSH en Linux es uno de esos cambios que tardas 15 minutos en hacer y que mejoran para siempre tu seguridad y tu flujo de trabajo. La mayoria de la gente se conecta a servidores con contraseña — y eso tiene dos consecuencias graves:

  1. Perder tiempo escribiéndola.
  2. Exposición a ataques de fuerza bruta.

La solución es muy simple...configurar claves SSH.

Configurar claves SSH es un sistema de autenticación más seguro, más cómodo y que, una vez configurado, funciona solo. En esta guía te lo explico paso a paso, sin rodeos y con los errores más comunes ya resueltos para que no te bloquees a mitad del proceso.

Tabla de contenido

  1. ¿Por qué deberías dejar de usar contraseñas en SSH y configurar claves SSH?
  2. Como funciona la autenticacion SSH con claves
  3. Paso 1: Genera tu par de claves SSH
  4. Paso 2: Copia tu clave pública al servidor
  5. Paso 3: Prueba la conexión
  6. Paso 4: Desactiva el acceso por contraseña
  7. Errores comunes en SSH con claves y como solucionarlos
  8. SSH config: simplifica tus conexiones con multiples servidores
  9. Resumen: comandos SSH esenciales
  10. Preguntas frecuentes (FAQ)

¿Por qué deberías dejar de usar contraseñas en SSH y configurar claves SSH?

Si te conectas a servidores con SSH usando una contraseña, estas haciendo 2 cosas mal:

  1. Perdiendo tiempo👎
  2. Abriendo una puerta para ser atacado

Configurar claves SSH resuelve ambos problemas:

  1. Son muy seguras ✅
  2. Una vez configuradas te conectas sin escribir nada ✌️

Como funciona la autenticacion SSH con claves

SSH con claves usa un sistema de par de llaves:

  • 🔑 Clave privada: vive en tu PC. Nunca la compartas con nadie.
  • 🔓 Clave pública: la copias al servidor. Es como un candado que solo tu llave privada puede abrir.

Cuando te conectas, el servidor comprueba si tu clave privada encaja con la pública que tiene guardada. Si encajan → acceso. Si no → rechazado. Sin contraseña de por medio.Diagrama del proceso de autenticacion SSH con claves publica y privada

Paso 1: Genera tu par de claves SSH

Abre una terminal en el PC desde el cual te vas a conectar luego al servidor y ejecuta:

ssh-keygen -t ed25519 -C "tu@email.com"
💡
¿Por qué ed25519 y no rsa? Ed25519 es más moderno, más seguro y genera claves más cortas. Úsalo siempre que puedas. Si tu servidor es muy antiguo, usa rsa -b 4096.

Después de ejecutar el comando, te hará 3 preguntas:

Enter file in which to save the key (/home/tuusuario/.ssh/id_ed25519):

→ Pulsa Enter para usar la ruta por defecto. O escribe una ruta personalizada si tienes varias claves.

Enter passphrase (empty for no passphrase):

→ Puedes dejarla vacía (Enter) o poner una contraseña extra para proteger la clave privada. Si la pones, tendrás que escribirla al conectarte, pero solo la primera vez si usas ssh-agent.

Enter same passphrase again:

→ Repite la passphrase o pulsa Enter de nuevo.

Resultado: Se crean dos archivos en ~/.ssh/:

  • id_ed25519 → tu clave privada (¡no la compartas!)
  • id_ed25519.pub → tu clave pública (esta sí la copiarás al servidor)

Paso 2: Copia tu clave pública al servidor

Lo que vamos a hacer es copiar en el servidor la clave pública que hemos creado anteriormente en el cliente.

Servidor: Ubuntu -> usuario:analista
Cliente: Cachy OS

Método A: ssh-copy-id (el más fácil)

Ejecutamos en la terminal el siguiente comando:

ssh-copy-id usuario@ip-del-servidor


# El usuario es el usuario del servidor al que nos conectaremos

En mi caso yo me conectaré desde mi cliente (usando el usuario analista que ya está creado en el servidor Ubuntu) al Servidor Ubuntu.

Al ejecutar el comando anterior, nos preguntará si queremos continuar con la conexión, escribimos yes y pulsamos Enter.

Terminal mostrando ssh-copy-id solicitando confirmacion de conexion

Luego te pedirá la contraseña del usuario del servidor una última vez y copiará automáticamente tu clave pública. Después de esto, ya no necesitarás contraseña.

Terminal pidiendo contraseña del servidor por ultima vez al copiar clave SSH

Luego nos dirá que la clave fue añadida

Confirmacion de que la clave SSH fue añadida correctamente al servidor

Ahora podremos conectarnos por SSH al usuario analista del servidor sin necesidad de escribir contraseñas.

Conexion SSH al servidor sin contraseña tras configurar claves ed25519

Método B: Manual (cuando no tienes ssh-copy-id)

Primero nos conectaremos al servidor con nuestro usuario y contraseña:

ssh usuario@ip-del-servidor

Comprobaremos si tenemos la carpeta .ssh, en el caso de no tenerla ejecutaremos:

mkdir -p ~/.ssh

chmod 700 ~/.ssh

Ahora cerraremos la conexión SSH escribiendo "exit" y pulsando enter.

Desde el cliente vamos a copiar nuestra clave pública en el servidor usando el comando scp.

Comando scp copiando clave publica SSH al servidor de forma manual

scp .ssh/tu_clave_publica.pub  usuario@ip_servidor:/home/usuario/.ssh/authorized_keys

Paso 3: Prueba la conexión

Ahora si todo fue bien entraremos directamente sin que nos pida la contraseña:

ssh usuario@ip-del-servidor
Conexion SSH exitosa sin contraseña desde terminal Linux
Conexion SSH exitosa sin contraseña desde terminal Linux

Paso 4: Desactiva el acceso por contraseña

Una vez que compruebes que puedes entrar con tu clave, desactiva el login por contraseña en el servidor. Esto elimina casi por completo los ataques de fuerza bruta.

En el servidor, tienes que editar el archivo de configuración de SSH:

sudo nano /etc/ssh/sshd_config

Ahora busca las siguientes lineas y déjalas así:

PasswordAuthentication no

UsePAM no

Al desactivar estas opciones ocurre lo siguiente:

Opciones SSH – zymeralabs.com
PasswordAuthentication no

Desactiva el login por contraseña estándar de SSH. Sin esta opción desactivada, cualquiera puede intentar entrar a tu servidor probando contraseñas por fuerza bruta.

Esta es la opción principal. Si solo puedes tocar una, que sea esta.
UsePAM no

PAM (Pluggable Authentication Modules) es el sistema de autenticación general de Linux. Si lo dejas activo, puede permitir acceso por contraseña aunque PasswordAuthentication esté desactivado, dependiendo de cómo esté configurado el sistema.

Desactivarlo cierra ese último resquicio. Ten en cuenta que PAM también gestiona otras cosas como sesiones, límites de recursos o 2FA — en servidores simples no afecta, pero en configuraciones complejas puede tener efectos secundarios.

Si usas 2FA vía PAM (Google Authenticator, etc.), desactivar esta opción lo romperá.

Config recomendada

PasswordAuthentication no
UsePAM no
⚠️
Importante: Antes de guardar, asegúrate de que puedes conectarte con tu clave. Si cierras la sesión sin poder volver a entrar, quedarás bloqueado.

Guarda el archivo y reinicia el servicio SSH:

sudo systemctl restart sshd
10 comandos de Linux esenciales para DevOps (con ejemplos reales)
Los 10 comandos de Linux más usados en DevOps: grep, tail, curl, jq, rsync y más. Con ejemplos reales y capturas de producción.

Errores comunes en SSH con claves y como solucionarlos

❌ Permission denied (publickey)

El servidor no acepta tu clave. Causas habituales:

  1. La clave pública no está bien copiada
    Verifica que el archivo ~/.ssh/authorized_keys del servidor contiene exactamente tu clave pública, sin saltos de línea extra ni espacios al final.
cat ~/.ssh/authorized_keys
  1. Permisos incorrectos SSH es muy estricto con los permisos. En el servidor ejecuta:
chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys
10 comandos de Linux esenciales para DevOps (con ejemplos reales)
Los 10 comandos de Linux más usados en DevOps: grep, tail, curl, jq, rsync y más. Con ejemplos reales y capturas de producción.

Y comprueba que la carpeta home no tiene permisos de escritura para otros:

ls -ld ~

# debe mostrar algo como: drwxr-xr-x
  1. Estás usando la clave equivocada.Si tienes varias claves, especifica cuál usar:
ssh -i ~/.ssh/clave_publica usuario@servidor

❌ Could not open a connection to your authentication agent

Pasa cuando intentas usar ssh-add pero el agente SSH no está corriendo

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/id_ed25519

❌ Bad permissions o Permissions too open

SSH rechaza tu clave privada porque sus permisos son demasiado abiertos.

chmod 600 ~/.ssh/id_ed25519

chmod 644 ~/.ssh/id_ed25519.pub

❌ Me quedé sin acceso después de desactivar contraseñas

Esto pasa si desactivaste PasswordAuthentication antes de probar la clave.

Si tienes acceso por consola (panel de control del VPS, acceso físico al servidor):
Entra por consola, edita /etc/ssh/sshd_config, vuelve a poner PasswordAuthentication yes y reinicia sshd.

Si no tienes acceso de ningún tipo:
Muchos proveedores de VPS tienen una consola de emergencia o modo recovery. Desde ahí puedes editar el archivo de configuración.

💡 Lección aprendida: Siempre prueba que la clave funciona en una sesión nueva antes de cerrar la sesión actual con la que hiciste los cambios.

❌ En Windows: la clave no se reconoce

Si usas PowerShell nativo en Windows (no WSL), asegúrate de que:

  1. OpenSSH está instalado (Settings → Apps → Optional Features → OpenSSH Client)
  2. Los permisos del archivo de clave son correctos. En PowerShell:
icacls "$env:USERPROFILE\.ssh\id_ed25519" /inheritance:r /grant:r "$env:USERNAME:(R)"

SSH config: simplifica tus conexiones con multiples servidores

Si te conectas a varios servidores, crea un archivo de configuración para no tener que recordar IPs, usuarios y rutas de claves:

nano ~/.ssh/config

Ejemplo de contenido

Host miservidor
    HostName 192.168.1.100
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519

Host trabajo
    HostName servidor.empresa.com
    User admin
    Port 2222
    IdentityFile ~/.ssh/clave_trabajo
    

Ahora puedes conectarte simplemente ejecutando:

ssh miservidor

ssh trabajo

Resumen: comandos SSH esenciales

Categoría Comando Qué hace
Conexión
ssh usuario@servidor
Conecta al servidor remoto con el usuario especificado.
Conexión
ssh -p 2222 usuario@servidor
Conecta usando un puerto personalizado (por defecto es el 22).
Conexión
ssh -i ~/.ssh/clave usuario@servidor
Conecta usando una clave privada específica.
Claves
ssh-keygen -t ed25519 -C "email"
Genera un par de claves SSH (privada + pública) con el algoritmo ed25519.
Claves
ssh-copy-id usuario@servidor
Copia tu clave pública al servidor para autenticación sin contraseña.
Claves
cat ~/.ssh/id_ed25519.pub
Muestra tu clave pública para copiarla manualmente al servidor.
Claves
ssh-add ~/.ssh/id_ed25519
Añade tu clave privada al agente SSH para no introducir la passphrase cada vez.
Transferencia
scp archivo.txt usuario@servidor:~/
Copia un archivo local al directorio home del servidor remoto.
Transferencia
scp -r carpeta/ usuario@servidor:~/
Copia una carpeta entera al servidor de forma recursiva.
Transferencia
sftp usuario@servidor
Abre una sesión de transferencia de archivos interactiva sobre SSH.
Túneles
ssh -L 8080:localhost:80 usuario@servidor
Redirige el puerto local 8080 al puerto 80 del servidor (túnel SSH).
Túneles
ssh -D 1080 usuario@servidor
Crea un proxy SOCKS5 dinámico en el puerto local 1080.
Config
sudo systemctl restart sshd
Reinicia el servicio SSH para aplicar cambios de configuración.
Config
sudo nano /etc/ssh/sshd_config
Edita el archivo de configuración principal del servidor SSH.
Config
ssh -v usuario@servidor
Modo verbose: muestra el proceso de autenticación para depurar errores.
Backups automáticos con cron en Linux: guia paso a paso
Aprende a automatizar backups en Linux con cron paso a paso. Incluye sintaxis explicada, script profesional listo para usar, ejemplos reales y FAQ. Guía para principiantes y sysadmins.

Preguntas frecuentes (FAQ)

Seguridad

Ed25519 es más seguro. Usa criptografía de curva elíptica, genera claves más cortas y es resistente a ataques que pueden afectar a RSA con tamaños de clave pequeños. Además es más rápido tanto al generar la clave como al autenticarse.

RSA sigue siendo válido si usas 4096 bits, pero solo tiene sentido en servidores muy antiguos que no soporten ed25519. Si tu servidor es moderno, usa siempre ed25519.

Claves

Sí, técnicamente puedes copiar tu clave pública a tantos servidores como quieras. Es lo más cómodo y en entornos personales es una práctica habitual.

Sin embargo, en entornos profesionales o con servidores de producción es recomendable usar una clave por entorno (una para trabajo, otra para proyectos personales, otra para servidores críticos). Así, si una clave se ve comprometida, solo afecta a ese entorno.

Importante

Pierdes el acceso al servidor si no tienes ningún otro método habilitado. La clave privada no se puede recuperar ni regenerar — no hay forma de deducirla a partir de la clave pública.

Lo más importante es prevenirlo: ten siempre un método alternativo activo, como acceso por consola desde el panel de tu proveedor de VPS o un segundo par de claves registrado. Si ya perdiste el acceso, la única salida es entrar por consola de emergencia y añadir una nueva clave pública al archivo ~/.ssh/authorized_keys.

Configuración

No es obligatorio, pero sí recomendable. La passphrase cifra tu clave privada en disco. Si alguien consigue acceso a tu máquina y roba el archivo, sin passphrase puede usarla directamente. Con passphrase, necesita también conocerla.

Para evitar tener que escribirla cada vez puedes usar ssh-agent, que la recuerda durante la sesión y solo te la pide una vez al inicio.

Diagnóstico

La forma más rápida es intentar conectarte con tu clave. Si el servidor las acepta, entras directamente. Si no, te pedirá contraseña.

También puedes comprobarlo mirando la configuración del servidor:

grep -i "PubkeyAuthentication" /etc/ssh/sshd_config

Si el resultado es PubkeyAuthentication yes (o no aparece nada, ya que es el valor por defecto), el servidor acepta claves. Si está en no, cámbialo a yes y reinicia el servicio SSH.

Conclusión

Configurar SSH con claves es uno de esos cambios que tardas 10 minutos en hacer y que mejoran enormemente tanto tu flujo de trabajo como la seguridad de tus servidores. Una vez lo pruebas, no vuelves a las contraseñas.

Read more