En el servidor (Ubuntu Server)
Comprueba que SSH está activo:
sudo systemctl status ssh
Si no estuviera activo:
sudo systemctl enable --now ssh
Averigua la IP del servidor:
ip a
Quédate con algo como 192.168.1.50.
En el cliente
- Si el alumno está en Linux/macOS: ya tiene
ssh. - Si está en Windows: puede usar PowerShell (trae
ssh) o Windows Terminal.
1) Primera conexión “normal” (para ver que funciona)
En el cliente, conecta:
ssh usuario@192.168.1.50
Ejemplo:
ssh alumno@192.168.1.50
La primera vez saldrá el aviso de huella:
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Escribe:
yes
Mete la contraseña del usuario.
✅ Resultado esperado: entras y ves el prompt del servidor.
2) Crear usuario “de trabajo” y evitar usar root
En el servidor, crea un usuario nuevo (si no existe):
sudo adduser operario
Dale permisos de administración (sudo):
sudo usermod -aG sudo operario
Prueba desde el cliente entrar con ese usuario:
ssh operario@192.168.1.50
✅ Objetivo: que el alumno use siempre un usuario normal + sudo, no root.
3) Generar claves SSH (cliente) y copiarlas (servidor)
3.1 Generar clave en el CLIENTE
En el cliente:
ssh-keygen -t ed25519 -C "operario@lab"
Cuando pregunte dónde guardarla, ENTER.
Cuando pregunte passphrase, pon una (recomendado). Ejemplo: ClaveMuySecreta123!
Esto crea:
~/.ssh/id_ed25519(privada, NO se comparte)~/.ssh/id_ed25519.pub(pública, sí se comparte)
3.2 Copiar clave pública al SERVIDOR
Desde el cliente:
ssh-copy-id operario@192.168.1.50
Luego prueba entrar sin contraseña (solo con passphrase si la pusiste):
ssh operario@192.168.1.50
✅ Resultado esperado: ya no te pide la contraseña del usuario (solo la passphrase de la clave si existe).
4) Endurecer SSH: desactivar root y contraseñas
Ahora viene lo serio: si alguien intenta fuerza bruta, no hay contraseña que adivinar.
En el servidor, edita configuración:
sudo nano /etc/ssh/sshd_config
Busca (o añade) estas líneas:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Opcional (muy recomendable): restringir a un usuario concreto:
AllowUsers operario
Guarda y reinicia SSH:
sudo systemctl restart ssh
Prueba crítica (NO saltársela)
- Mantén una sesión SSH abierta por si la lías (salvavidas).
- Abre otra terminal nueva e intenta entrar:
ssh operario@192.168.1.50
✅ Debe entrar con clave.
❌ Si pide contraseña y ya la desactivaste, es que la clave no está bien instalada.
5) Cambiar el puerto SSH (reduce ruido automático)
Esto no es “seguridad mágica”, pero quita miles de bots tontos.
En el servidor:
sudo nano /etc/ssh/sshd_config
Cambia o añade:
Port 2222
Reinicia:
sudo systemctl restart ssh
Ahora para entrar desde cliente:
ssh -p 2222 operario@192.168.1.50
6) Activar firewall UFW y permitir solo SSH
En el servidor:
sudo ufw allow 2222/tcp
sudo ufw enable
sudo ufw status verbose
✅ Debe verse permitido el puerto 2222/tcp.
7) Verificación y “pruebas de ataque” controladas
7.1 Ver qué está escuchando
Servidor:
ss -tulpn | grep ssh
Debería verse :2222.
7.2 Probar que root NO entra
Cliente:
ssh -p 2222 root@192.168.1.50
✅ Debe fallar.
7.3 Probar que contraseña NO sirve
Cliente (forzando password):
ssh -p 2222 -o PreferredAuthentications=password -o PubkeyAuthentication=no operario@192.168.1.50
✅ Debe fallar.
8) Extras opcionales de seguridad (si te da tiempo)
A) Desactivar acceso por usuario/contraseña en el propio sistema (no solo SSH)
No siempre interesa en clase, pero es un plus.
B) Fail2ban (bloquea IPs tras intentos)
Instalar:
sudo apt update
sudo apt install fail2ban -y
Comprobar:
sudo systemctl status fail2ban
Esto es “el portero del garito”: si alguien insiste, lo echa.








![[Reto] - Infraestructura virtualizada con Ubuntu Server 9dc81aff-d57d-45b1-83e9-c70955561713](https://laaventuradeaprender.com/wp-content/uploads/2026/03/9dc81aff-d57d-45b1-83e9-c70955561713-150x150.png)