Claves SSH: configura SSH sin contraseña paso a paso en Linux
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:
- Perder tiempo escribiéndola.
- 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
- ¿Por qué deberías dejar de usar contraseñas en SSH y configurar claves SSH?
- Como funciona la autenticacion SSH con claves
- Paso 1: Genera tu par de claves SSH
- Paso 2: Copia tu clave pública al servidor
- Paso 3: Prueba la conexión
- Paso 4: Desactiva el acceso por contraseña
- Errores comunes en SSH con claves y como solucionarlos
- SSH config: simplifica tus conexiones con multiples servidores
- Resumen: comandos SSH esenciales
- 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:
- Perdiendo tiempo👎
- Abriendo una puerta para ser atacado❌
Configurar claves SSH resuelve ambos problemas:
- Son muy seguras ✅
- 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.
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"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 conectaremosEn 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.

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.

Luego nos dirá que la clave fue añadida

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

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-servidorComprobaremos si tenemos la carpeta .ssh, en el caso de no tenerla ejecutaremos:
mkdir -p ~/.ssh
chmod 700 ~/.sshAhora 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.

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
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_configAhora busca las siguientes lineas y déjalas así:
PasswordAuthentication no
UsePAM noAl desactivar estas opciones ocurre lo siguiente:
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.
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.
Config recomendada
PasswordAuthentication no UsePAM no
Guarda el archivo y reinicia el servicio SSH:
sudo systemctl restart sshd
Errores comunes en SSH con claves y como solucionarlos
❌ Permission denied (publickey)
El servidor no acepta tu clave. Causas habituales:
- 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- Permisos incorrectos SSH es muy estricto con los permisos. En el servidor ejecuta:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Y comprueba que la carpeta home no tiene permisos de escritura para otros:
ls -ld ~
# debe mostrar algo como: drwxr-xr-x- 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:
- OpenSSH está instalado (Settings → Apps → Optional Features → OpenSSH Client)
- 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/configEjemplo 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
ssh usuario@servidorssh -p 2222 usuario@servidorssh -i ~/.ssh/clave usuario@servidorssh-keygen -t ed25519 -C "email"ssh-copy-id usuario@servidorcat ~/.ssh/id_ed25519.pubssh-add ~/.ssh/id_ed25519scp archivo.txt usuario@servidor:~/scp -r carpeta/ usuario@servidor:~/sftp usuario@servidorssh -L 8080:localhost:80 usuario@servidorssh -D 1080 usuario@servidorsudo systemctl restart sshdsudo nano /etc/ssh/sshd_configssh -v usuario@servidor
Preguntas frecuentes (FAQ)
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.
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.
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.
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.
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.