Guia de configuracion de claves SSH: Crear claves, desactivar contrasena root y proteger tu VPS
Aprende a crear claves SSH, desactivar el inicio de sesion con contrasena root y verificar puertos abiertos en tu VPS. Guia paso a paso para proteger tu servidor en minutos.
Guia de configuracion de claves SSH: Crear claves, desactivar contrasena root y proteger tu VPS
Cada VPS que inicias es escaneado inmediatamente por bots que prueban contrasenas predeterminadas. En cuestion de minutos. Si todavia inicias sesion con una contrasena de root, estas a un ataque de fuerza bruta de tener un servidor comprometido.
Las claves SSH solucionan esto. Son mas fuertes que cualquier contrasena, mas rapidas de usar y te permiten desactivar completamente el inicio de sesion con contrasena. Aqui te explicamos como configurar todo, ademas de como verificar que puertos estan expuestos en tu servidor.
Paso 1: Crear un par de claves SSH
Las claves SSH funcionan en pares: una clave privada (se queda en tu computadora, nunca la compartas) y una clave publica (va al servidor).
En macOS o Linux
Abre una terminal y ejecuta:
ssh-keygen -t ed25519 -C "your@email.com"
Veras:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/you/.ssh/id_ed25519):
Presiona Enter para aceptar la ubicacion predeterminada. Luego establece una frase de contrasena (recomendado) o presiona Enter para omitirla.
Esto crea dos archivos:
| Archivo | Que es | Compartirlo? |
|---|---|---|
~/.ssh/id_ed25519 | Clave privada | Nunca |
~/.ssh/id_ed25519.pub | Clave publica | Si, copiala a los servidores |
En Windows
Opcion A: Windows Terminal / PowerShell
ssh-keygen -t ed25519 -C "your@email.com"
El mismo proceso que arriba. Las claves se guardan en C:\Users\YourName\.ssh\.
Opcion B: PuTTYgen
- Descarga PuTTY
- Abre PuTTYgen
- Selecciona EdDSA (Ed25519)
- Haz clic en Generate y mueve el raton
- Guarda la clave privada (
.ppk) y copia el texto de la clave publica
Por que Ed25519?
| Algoritmo | Tamano de clave | Seguridad | Velocidad |
|---|---|---|---|
| RSA 4096 | 4096-bit | Buena | Mas lenta |
| Ed25519 | 256-bit | Excelente | La mas rapida |
| ECDSA | 256-bit | Buena | Rapida |
Ed25519 es el estandar moderno: claves mas cortas, operaciones mas rapidas, seguridad solida. Usalo a menos que necesites compatibilidad RSA con sistemas muy antiguos.
Paso 2: Copiar tu clave publica al servidor
Metodo 1: ssh-copy-id (El mas facil)
ssh-copy-id root@your-server-ip
Introduce tu contrasena por ultima vez. Listo. La herramienta agrega tu clave publica a ~/.ssh/authorized_keys en el servidor.
Metodo 2: Copia manual
Si ssh-copy-id no esta disponible:
cat ~/.ssh/id_ed25519.pub | ssh root@your-server-ip \
"mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Metodo 3: Durante la creacion del VPS
La mayoria de los proveedores te permiten agregar claves SSH al crear un servidor:
- Hostinger — Pega la clave publica en la seccion de claves SSH durante la configuracion
- Hetzner — Agrega claves a tu cuenta, seleccionalas durante la creacion del servidor
- DigitalOcean — Lo mismo, en Settings, Security, SSH Keys
- Vultr — Products, SSH Keys, Add SSH Key
Este es el mejor enfoque: el servidor esta protegido desde el momento en que arranca.
Verifica que funciona
ssh root@your-server-ip
Deberias iniciar sesion sin que te pidan una contrasena (o solo te pediran la frase de contrasena de tu clave si configuraste una).
Paso 3: Desactivar el inicio de sesion con contrasena de root
Una vez que el inicio de sesion con clave SSH funciona, desactiva completamente la autenticacion con contrasena. Esto hace que los ataques de fuerza bruta sean imposibles.
Editar la configuracion de SSH
sudo nano /etc/ssh/sshd_config
Busca y cambia estas lineas (algunas pueden estar comentadas con #):
# Desactivar autenticacion con contrasena
PasswordAuthentication no
# Desactivar contrasenas vacias
PermitEmptyPasswords no
# Desactivar challenge-response (PAM)
KbdInteractiveAuthentication no
# Opcional: desactivar el inicio de sesion como root completamente (usa un usuario regular + sudo en su lugar)
# PermitRootLogin no
# Si quieres inicio de sesion como root pero SOLO con claves:
PermitRootLogin prohibit-password
Aplicar los cambios
sudo systemctl restart sshd
Advertencia: Antes de cerrar tu sesion actual, abre una nueva terminal y verifica que puedes seguir iniciando sesion con tu clave. Si te bloqueas, necesitaras acceso a la consola desde el panel de control de tu proveedor de VPS.
Pruebalo
Desde otra maquina (o intenta explicitamente con contrasena):
ssh -o PreferredAuthentications=password root@your-server-ip
Deberias ver:
Permission denied (publickey).
Eso significa que el inicio de sesion con contrasena esta desactivado. Solo tu clave SSH funciona ahora.
Paso 4: Verificar puertos abiertos en tu VPS
Cada puerto abierto es una superficie de ataque potencial. Deberias saber exactamente que esta expuesto.
Verificar desde dentro de tu servidor
Listar todos los puertos en escucha:
ss -tlnp
La salida se ve asi:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234))
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=5678))
LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=5678))
LISTEN 0 128 127.0.0.1:5432 0.0.0.0:* users:(("postgres",pid=9012))
Que te dice cada columna:
| Columna | Significado |
|---|---|
0.0.0.0:22 | Escuchando en todas las interfaces (accesible publicamente) |
127.0.0.1:5432 | Escuchando solo en localhost (no accesible publicamente) |
| Process | Que programa esta usando el puerto |
Punto clave: Todo lo que esta en 0.0.0.0 o [::] es accesible desde internet. Todo lo que esta en 127.0.0.1 es solo local.
Verificar desde fuera de tu servidor
Esto te dice lo que internet realmente ve.
Usando nmap (el mas completo):
# Instala nmap en tu maquina local
# macOS: brew install nmap
# Ubuntu: sudo apt install nmap
# Escanear puertos comunes
nmap your-server-ip
# Escanear TODOS los puertos (toma mas tiempo)
nmap -p- your-server-ip
# Escanear con deteccion de servicios
nmap -sV your-server-ip
Usando netcat (verificacion rapida de un solo puerto):
nc -zv your-server-ip 22
nc -zv your-server-ip 3306
Usando un escaner en linea:
Visita shodan.io y busca la IP de tu servidor. Muestra todos los puertos y servicios detectados publicamente, exactamente lo que ven los atacantes.
Que puertos deberian estar abiertos?
Para un servidor web tipico:
| Puerto | Servicio | Deberia estar abierto? |
|---|---|---|
| 22 | SSH | Si (considera cambiarlo a uno no estandar) |
| 80 | HTTP | Si (redirige a HTTPS) |
| 443 | HTTPS | Si |
| 3306 | MySQL | No, enlazar a localhost |
| 5432 | PostgreSQL | No, enlazar a localhost |
| 6379 | Redis | No, enlazar a localhost |
| 27017 | MongoDB | No, enlazar a localhost |
Regla general: Si un servicio no necesita ser accesible desde internet, enlazalo a 127.0.0.1.
Cerrar puertos innecesarios con UFW
UFW (Uncomplicated Firewall) es la forma mas sencilla de gestionar el acceso a puertos en Ubuntu/Debian:
# Habilitar UFW (permite SSH primero!)
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
# Verificar estado
sudo ufw status verbose
# Bloquear un puerto especifico
sudo ufw deny 3306
# Permitir solo desde una IP especifica
sudo ufw allow from 203.0.113.50 to any port 22
Siempre permite SSH antes de habilitar UFW. De lo contrario, te bloquearas el acceso.
Extra: Endurecimiento adicional de SSH
Cambiar el puerto SSH predeterminado
Mover SSH del puerto 22 elimina el 99% de los escaneos automatizados:
# /etc/ssh/sshd_config
Port 2222
sudo systemctl restart sshd
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp
Luego conectate con:
ssh -p 2222 root@your-server-ip
Configurar un archivo de configuracion SSH
Deja de escribir comandos largos. Crea ~/.ssh/config en tu maquina local:
Host myserver
HostName 203.0.113.50
User root
Port 2222
IdentityFile ~/.ssh/id_ed25519
Ahora solo escribe:
ssh myserver
Habilitar Fail2Ban
Fail2Ban monitorea archivos de registro y bloquea temporalmente las IPs con demasiados intentos fallidos de inicio de sesion:
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Verificar IPs bloqueadas
sudo fail2ban-client status sshd
Lista rapida de seguridad
Despues de configurar cualquier VPS nuevo, revisa esto:
- Par de claves SSH creado y copiado al servidor
- Autenticacion con contrasena desactivada
- Inicio de sesion como root configurado en
prohibit-passwordo desactivado - UFW habilitado con solo los puertos necesarios abiertos
- Bases de datos enlazadas solo a localhost
- Puerto SSH cambiado del predeterminado 22
- Fail2Ban instalado y en ejecucion
- Paquetes del sistema actualizados (
apt update && apt upgrade)
Preguntas frecuentes
Perdi mi clave SSH. Como puedo volver a acceder?
Usa la consola web de tu proveedor de VPS (disponible en el panel de control de cada proveedor). Te da acceso directo a la terminal sin SSH. Desde ahi, puedes agregar una nueva clave publica o volver a habilitar temporalmente la autenticacion con contrasena.
Puedo usar multiples claves SSH?
Si. Agrega cada clave publica en su propia linea en ~/.ssh/authorized_keys en el servidor. Util para acceso en equipo o diferentes dispositivos.
Deberia establecer una frase de contrasena en mi clave?
Si, especialmente en dispositivos compartidos o portatiles. Agrega una segunda capa de seguridad: incluso si alguien roba tu archivo de clave, no podra usarlo sin la frase de contrasena. Usa ssh-agent para evitar escribirla cada vez:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Cambiar el puerto SSH es realmente util?
No mejora la seguridad contra ataques dirigidos, pero elimina aproximadamente el 99% del trafico automatizado de bots. Menos ruido en tus registros, menos recursos desperdiciados en intentos fallidos.
Como se si alguien esta intentando entrar?
Revisa tu registro de autenticacion:
# Ubuntu/Debian
sudo tail -100 /var/log/auth.log | grep "Failed password"
# CentOS/RHEL
sudo tail -100 /var/log/secure | grep "Failed password"
Si ves miles de entradas de diferentes IPs, eso es escaneo normal de bots. Es exactamente por lo que desactivas la autenticacion con contrasena.
Que sigue?
Ahora que SSH esta asegurado y sabes que puertos estan abiertos, has cubierto los vectores de ataque mas criticos. Para profundizar en la seguridad de VPS, consulta nuestra guia de seguridad de VPS y la guia de configuracion de WireGuard para tuneles cifrados entre servidores.
Necesitas un VPS para practicar? Los planes KVM de Hostinger comienzan en unos pocos dolares al mes y te dan acceso root completo, perfecto para aprender seguridad de servidores de forma practica.
Ready to get started?
Get the best VPS hosting deal today. Hostinger offers 4GB RAM VPS starting at just $4.99/mo.
Get Hostinger VPS — $4.99/mo// up to 75% off + free domain included
// related topics
// related guides
$1 VPS Hosting 2026: Cheapest VPS Servers Starting at $1/Month
Looking for $1 VPS hosting? Compare the cheapest VPS providers starting from $1-3/month. Real specs, no hidden fees, honest reviews of budget VPS options.
tutorialCaddy Reverse Proxy Guide 2026: Automatic HTTPS Made Easy
Set up Caddy as a reverse proxy with automatic HTTPS, zero-config SSL, and simple Caddyfile syntax. Complete VPS deployment guide.
tutorialCloudflare Tunnel VPS Guide 2026: Expose Services Without Opening Ports
Set up Cloudflare Tunnel on your VPS to expose web apps securely without opening ports or revealing your server IP. Complete guide with Docker and DNS config.
tutorialCoolify VPS Setup Guide 2026: Self-Hosted Vercel Alternative
Deploy Coolify on your VPS for a self-hosted Vercel/Netlify experience. Complete setup guide with Docker, SSL, and app deployments.
Andrius Putna
I am Andrius Putna. Geek. Since early 2000 in love tinkering with web technologies. Now AI. Bridging business and technology to drive meaningful impact. Combining expertise in customer experience, technology, and business strategy to deliver valuable insights. Father, open-source contributor, investor, 2xIronman, MBA graduate.
// last updated: March 14, 2026. Disclosure: This article may contain affiliate links.