
ENDURECIMIENTO DE SSH
Bloquea SSH en Debian/Ubuntu de una sola ejecución: nuevo puerto, sin inicio de sesión como root, autenticación basada en clave, UFW y Fail2Ban opcionales.
Cuando ejecutes el script, detecta tu SO y muestra la configuración antes de preguntar si continuar:

En Debian/Ubuntu:
sudo apt-get install -y git
rm -rf ssh-hardening
git clone https://github.com/spookey007/ssh-hardening.git
cd ssh-hardening
Ejecuta esto cada vez que quieras la última versión del script.
chmod +x ssh_harden.sh script.sh
Si te saltas esto, puede que obtengas "command not found" al ejecutar ./ssh_harden.sh. Si ocurre, usa el paso 5 con sudo bash ssh_harden.sh.
SSH_PUB_KEY)Linux / macOS
ssh-keygen -t ed25519 -C "[email protected]"
Presiona Enter para la ruta por defecto (~/.ssh/id_ed25519). Opcional: establece una frase de contraseña.
Muestra tu clave pública (cópiala en SSH_PUB_KEY):
cat ~/.ssh/id_ed25519.pub
Windows (PowerShell o Git Bash)
ssh-keygen -t ed25519 -C "[email protected]"
Presiona Enter para la ruta por defecto. Opcional: establece una frase de contraseña.
Muestra tu clave pública:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pubtype %USERPROFILE%\.ssh\id_ed25519.pubCopia toda la línea (empieza con ssh-ed25519 ...). Ese es tu SSH_PUB_KEY.
Reemplaza los valores con los tuyos y luego ejecuta:
sudo SSH_USER=kamaileo \
SSH_PASS='TuContraseñaFuerte123!' \
SSH_PORT=49221 \
PORTS="5060,5061,10000-20000" \
SSH_PUB_KEY="ssh-ed25519 AAAA... tu@tumaquina" \
./ssh_harden.sh
Si obtienes "command not found", usa:
sudo bash ssh_harden.sh
(Con los mismos SSH_USER=... SSH_PASS=... etc. delante).
En una terminal nueva, conéctate usando el nuevo puerto (no el 22):
ssh -p 49221 kamaileo@TU_IP_DEL_SERVIDOR
Usa el puerto y el usuario que configuraste. Cierra la sesión original solo después de confirmar que el inicio de sesión y sudo funcionan.
Usa el nuevo puerto cada vez. Después del endurecimiento, SSH ya no está en el puerto 22. Conéctate siempre con:
ssh -p <TU_PUERTO> <USUARIO>@<IP_SERVIDOR>
Ejemplo: ssh -p 49221 [email protected]
Guarda la salida del script cuando termine. Al final, el script imprime un resumen con tu usuario, puerto, comando de conexión y si se estableció una contraseña. Copia o captura esa sección y guárdala en un lugar seguro. Si pierdes tu clave SSH, olvidas el puerto o la contraseña, ese registro te ayudará a recuperarte o reconectarte (p.ej. mediante consola/VNC con el mismo usuario y contraseña).
El script imprime todo lo que necesitas: usuario, puerto, estado de UFW/Fail2Ban y el comando exacto ssh -p .... Sin conjeturas.
Si SSH_USER ya está en el servidor, el script no crea un nuevo usuario y no cambia la contraseña. Solo:
sudo~/.ssh/authorized_keys si pasas SSH_PUB_KEYAsí que puedes ejecutarlo de nuevo para "endurecer solo" sin tocar la contraseña existente.
En SO no compatibles, el script imprime Próximamente 😊 y sale sin hacer cambios.
SSH_PUB_KEY para que puedas seguir iniciando sesión después de deshabilitar la autenticación por contraseña.ssh -p PUERTO usuario@servidor.Si este script te ahorró tiempo o un dolor de cabeza, puedes apoyar el proyecto con un pequeño donativo.
BTC: 3L1Gc4avD4Bqoi2F9aq6z4heT13fXA8DZ9
Gracias de todos modos.
| Variable | Ejemplo | Qué hace |
|---|
SSH_USER | kamaileo | Nombre de usuario (se crea si no existe; si existe, la contraseña no se modifica). |
SSH_PASS | 'TuPass123!' | Contraseña solo para usuarios nuevos. Usa una contraseña segura. |
SSH_PORT | 49221 | Puerto SSH. Usarás: ssh -p 49221 usuario@servidor. |
PORTS | "5060,5061,10000-20000" | Puertos adicionales para UFW (opcional). |
SSH_PUB_KEY | "ssh-ed25519 AAAA..." | Tu clave pública. Muy recomendada para no quedarte bloqueado. |
| SO | Compatible | Probado | Instalación de git |
|---|
| Debian 12 x64 | ✅ | ✅ | sudo apt-get install -y git |
| Debian 11/10, Ubuntu 24/22/20 | ✅ | ❌ | sudo apt-get install -y git |
| RHEL / Rocky / Alma / CentOS | ❌ | ❌ | sudo yum install -y git |
| Fedora | ❌ | ❌ | sudo dnf install -y git |
| Arch | ❌ | ❌ | sudo pacman -Syu git |
| openSUSE | ❌ | ❌ | sudo zypper install -y git |