SSH permite el uso de contraseñas para autenticarse, pero lo más recomendable es usar claves SSH, ya que son mucho más seguras y menos vulnerables a ataques de fuerza bruta.
Cuando generas un par de claves SSH, obtienes dos piezas: una clave pública y una privada. La clave pública se guarda en el servidor, mientras que la privada se mantiene en tu equipo. Para conectarte al servidor, el cliente SSH utiliza la clave privada.
Si las claves coinciden, el servidor te dará acceso sin pedirte una contraseña. Aun así, es buena práctica proteger la clave privada con una contraseña para añadir una capa extra de seguridad.
Aparte de ello vamos primeramente a desactivar el acceso de root a través de SSH
Desactivar acceso root por SSH
Lo primero es tener otro usuario con permisos de sudo que pueda acceder al sistema. Para ello vamos a agregar un nuevo usuario
addusser <usuario>
Se nos preguntara la contraseña del nuevo usuario y otros datos opcionales.
# adduser prueba
Añadiendo el usuario `prueba' ...
Añadiendo el nuevo grupo `prueba' (1001) ...
Adding new user `prueba' (1001) with group `prueba (1001)' ...
Creando el directorio personal `/home/prueba' ...
Copiando los ficheros desde `/etc/skel' ...
Nueva contraseña:
Vuelva a escribir la nueva contraseña:
passwd: contraseña actualizada correctamente
Cambiando la información de usuario para prueba
Introduzca el nuevo valor, o pulse INTRO para usar el valor predeterminado
Nombre completo []:
Número de habitación []:
Teléfono del trabajo []:
Teléfono de casa []:
Otro []:
¿Es correcta la información? [S/n] S
Adding new user `prueba' to supplemental / extra groups `users' ...
Añadiendo al usuario `prueba' al grupo `users' ...
Luego vamos a darle permisos de sudo con el siguiente comando
usermod -aG sudo <usuario>
Una vez hecho vamos a editar archivo de configuración de SSH.
sudo nano /etc/ssh/sshd_config
Modifica las siguiente linea a los valores que se indican descomentandola si es necesario.
PermitRootLogin no
Una vez hecho recarga el servicio ssh
systemctl reload sshd
Configurar Claves SSH y desactivar el acceso por contraseña
Para ello lo primero de todo es crear en nuestro ordenador personal (no en el servidor con Debian 12) un par de claves.
ssh-keygen -t ed25519
Este comando nos solicitará una información para continuar, el primero te pregunta sobre la ubicación donde se guardaran las claves, puedes pulsar Enter para guardarlo en la ubicación predeterminada.
La segunda cuestión versa sobre si deseas ponerle una contraseña a esa clave privada que esta creando, realmente la mejor opción es escribir una clave segura, pero si no deseas poner contraseña simplemente pulsa ENTER.
Por último debes copiar la clave pública desde tu equipo al servidor Debian 12
ssh-copy-id usuario@ip_del_servidor
Prueba la conexión, se te preguntará la clave que has introducido anteriormente para desbloquear la clave privada. Si todo es correcto vamos a deshabilitar el acceso baso en contraseña.
A partir de ahora realizaremos todos los pasos en el servidor por lo que conectate por SSH y edita el archivo de configuración de SSH.
sudo nano /etc/ssh/sshd_config
Modifica las siguiente linea a los valores que se indican descomentandola si es necesario.
PasswordAuthentication no
PubkeyAuthentication yes
Una vez hecho recarga el servicio ssh
systemctl reload sshd
Otros valores que puedes modificar en el archivo de configuración de SSH
También puedes limitar los usuarios que permites que se conecten mediante SSH
AllowUsers <usuario>
Limitar los intentos de autenticación fallida a 3 intentos
MaxAuthTries 3
Segundos que se permite que un usuario tenga una conexión abierta sin haberse autentificado.
LoginGraceTime 60
Configurar el cierre de sesión automático
ClientAliveInterval 300
ClientAliveCountMax 0
Limitar Conexiones no autenticadas
Esto limita los ataques por fuerza bruta al reducir de 10 a 3 el numero máximo de conexiones simultaneas.
MaxStartups 3
Deshabilitar el acceso a través de RSH inseguro.
IgnoreRhosts yes
Deshabilitar la autenticación basada en host
HostbasedAuthentication no
Y por último puedes habilitar un banner informativo que se mostrará antes de que un usuario se conecte
Banner /etc/issue