La autenticación por contraseña se considera un mecanismo débil. Puede ser objeto de distintos tipos de ataque, como los de diccionario, de fuerza bruta o incluso de Man In The Middle, como hemos visto anteriormente.
Se recomienda encarecidamente configurar una autenticación más robusta cuando se configura el servicio SSH, mediante claves de cifrado o mediante doble factor (2FA).
Etapa 1: configuración de la autenticación por claves en el servicio SSH
Para empezar es necesario autorizar las claves SSH en el archivo de configuración:
sudo nano /etc/ssh/sshd_config
Habrá que buscar y añadir el valor yes a " PubkeyAuthentication ":
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Para que los cambios surtan efecto es necesario reiniciar SSH:
service ssh restart
Etapa 2: generación de las claves SSH en el cliente
En la máquina cliente vamos a tener que generar una clave pública y una clave privada para poder autenticarse en el servidor SSH:
ssh-keygen -b 256 -t ecdsa

El comando ssh-keygen ha generado dos claves:
- Una clave privada en $home/.ssh/id_ecdsa, a la que solo usted debe tener acceso
- Una clave pública en $home/.ssh/id_ecdsa.pub, que se puede compartir
Ahora vamos a autorizar explícitamente a la máquina cliente a acceder al servidor por SSH. Hay que añadir la clave pública (id_ecdsa.pub) en el archivo authorized_keys del directorio .ssh del usuario que se elija para conectarse (por ejemplo: /home/$user/.ssh).
El método más sencillo es utilizar el comando ssh-copy-id, pero no está disponible por defecto en Windows. Por lo tanto, utilizaremos los comandos siguientes en Windows, lo que copiará la clave en el archivo authorized_keys de su usuario linux (~/.ssh/authorized_keys), aunque este no exista previamente. Sin embargo, es fundamental que la carpeta .ssh ya esté creada. Puede crearla con mkdir si es necesario.
Copia de la clave pública del cliente Windows hacia el Linux:
type %userprofile%\.ssh\id_ecdsa.pub | ssh user@192.168.8.128 "cat >> .ssh/authorized_keys"
Para ir más lejos, es posible desactivar la autenticación por contraseña para conservar únicamente la de claves.
¡Atención! Si se desactiva la autenticación por contraseña, hay que asegurarse de que la autenticación por clave es operativa, so pena de no poder acceder en absoluto a la máquina remota.
En el archivo de configuración /etc/ssh/sshd_config hay que descomentar la directiva PasswordAuthentication y luego aplicar el parámetro no.
sudo nano /etc/ssh/sshd_config
PasswordAuthentication no
Una vez guardado el archivo, todavía habrá que reiniciar el servicio para que el cambio sea efectivo.
service ssh restart
Las indicaciones siguientes proceden de las recomendaciones publicadas por la ANSSI, la agencia francesa de ciberseguridad:
- Comprobar que las claves privadas de cifrado presentes en el directorio /etc/ssh/ pertenecen al usuario root, solo en lectura y escritura
- Asegurarse de que se utiliza efectivamente la versión 2 del protocolo SSH
- El servidor SSH debe escuchar en un puerto distinto del 22/TCP
- Comprobar que los permisos sobre los archivos son aplicados de manera estricta por SSH
- El acceso SSH por el usuario root debe estar prohibido
- Aplicar una separación de privilegios mediante un entorno aislado (sandbox)
- Prohibir el acceso remoto a las cuentas que no dispongan de contraseña
- Autorizar 3 intentos de conexión sucesivos en caso de error en la contraseña
- El servicio debe mostrar al usuario la información de la última conexión cuando este se conecta
- Autorizar únicamente a los usuarios destinados a conectarse al servidor.
