Cómo habilitar inicios de sesión SSH sin contraseña en Linux

Es una excelente idea iniciar sesión en tu servidor SSH sin una contraseña. En serio, deshazte de ella. No hay necesidad de usar una contraseña en uno de los servicios más atacados en los servidores Linux, ¿verdad? Asegurar un servidor SSH utilizando autenticación estándar basada en contraseña es una mala idea. Los atacantes pueden fácilmente forzar contraseñas, y cuando son lo único que se interpone entre un actor malicioso y tu servidor, definitivamente deberías estar nervioso.
Tabla de Contenidos
- Instalar los Paquetes
- Generar tu Clave SSH en Linux
- Enviar tu Clave al Host Remoto de Linux
- Probar tu Conexión SSH en Linux
- Configurar SSH para Bloquear Contraseñas
- Preguntas Frecuentes
Por eso la autenticación basada en claves RSA es mucho mejor. Puedes configurar y asegurar tu servidor Linux para permitir el acceso solo desde computadoras que posean las claves RSA que ya han sido aceptadas. Cualquiera otra será rechazada de inmediato. Como beneficio adicional, puedes crear esas claves con o sin una contraseña, lo que depende completamente de ti. Una clave fuerte sin una contraseña está bien en la mayoría de los casos, sin embargo.
Si usas dispositivos Linux en casa también, tienes el beneficio adicional de la conveniencia. Digamos que quieres configurar el reenvío X de SSH desde tu estación de trabajo Linux a tu laptop. ¿Realmente quieres ingresar tu contraseña cada vez que ejecutas un programa remoto? Configura claves SSH, y no necesitarás hacerlo.
Instalar los Paquetes
Hay un par de paquetes que necesitas. Probablemente ya tengas algunos de ellos, pero es una buena idea verificar. Los paquetes son los mismos tanto en el servidor como en el cliente. Sin embargo, también hay una buena posibilidad de que ambas máquinas sean servidores y clientes entre sí (situación en casa), así que puede que quieras asegurarte de haber instalado estos paquetes.
El metapaquete OpenSSH no está instalado por defecto en los sistemas Debian o Ubuntu. Si aún no lo tienes instalado, puedes hacerlo ejecutando el siguiente comando:
sudo apt install ssh

Generar tu Clave SSH en Linux
Es realmente fácil generar tu clave SSH en Linux. Solo dile a OpenSSH que necesitas generar la clave. También es una buena idea especificar la cantidad de bits con la bandera -b y el tipo con -t. Una clave de 4096 bits es la mejor, ya que proporciona una encriptación más fuerte.
ssh-keygen -t ed25519
Primero, la utilidad te preguntará dónde quieres almacenar la clave. Simplemente presiona Enter para el directorio predeterminado. Cuando te pregunte por una contraseña, déjala en blanco para una clave sin contraseña y autenticación sin contraseña. Si deseas usar una contraseña para tu clave, ingrésala aquí.
Tu computadora tomará un par de segundos para generar tu clave. Cuando termine, imprimirá una representación en arte ASCII de tu clave en la terminal.
Enviar tu Clave al Host Remoto de Linux
Para usar tu clave, necesitarás enviarla a tu servidor remoto. OpenSSH tiene otra utilidad incorporada para eso también. Dile dónde está tu clave y qué usuario en el servidor asociar con ella.
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@ip_remote_host
Reemplaza ip_remote_host con la dirección IP real del host remoto, que gestionarás a través de SSH. Reemplaza username con el nombre de usuario real en el host remoto.

Es crucial que uses la opción -i para especificar el archivo de identidad que contiene tu clave pública. Si intentas usar tu clave SSH sin esta opción, puedes recibir un error.
Probar tu Conexión SSH en Linux
Con tu clave SSH en el servidor remoto, ahora puedes probar si tu conexión funciona correctamente.
Inicia sesión con el siguiente comando:
ssh username@ip_remote_host
El host remoto te iniciará sesión sin pedir la contraseña de la cuenta de usuario.

Sin embargo, si cometiste un error durante el proceso, el demonio SSH volverá automáticamente a la autenticación por contraseña para tu cuenta de usuario. Esto te permite acceder a tu servidor remoto incluso si tienes una clave RSA que no funciona.

Configurar SSH para Bloquear Contraseñas
Para la mejor seguridad, necesitas deshabilitar los inicios de sesión por contraseña SSH en tu servidor Linux. Similar a habilitar la autenticación de dos factores en SSH, esto evita que alguien fuerce su camino hacia tu servidor.

Es importante asegurarte de que puedes iniciar sesión de manera confiable con tu clave SSH antes de hacer esto, ya que es posible que te quedes fuera de tu servidor remoto si tienes una clave que no funciona.
Puedes encontrar el archivo de configuración para tu demonio SSH en “/etc/ssh/sshd_config.” Abre el archivo en el servidor usando sudo y tu editor de texto preferido. Por ejemplo, abre este archivo usando nano ejecutando el siguiente comando:
sudo nano /etc/ssh/sshd_config
Encuentra las líneas a continuación presionando Ctrl + W y edítalas para que se vean como el ejemplo. Descomenta ambas entradas y cambia los valores a no.
PasswordAuthentication no PermitEmptyPasswords no

PasswordAuthentication especifica si se debe usar la autenticación por contraseña. Lo configuramos en “no” porque queremos usar solo claves SSH.
PermitEmptyPasswords especifica si el servidor permite el inicio de sesión con una contraseña vacía. Nunca deberías permitir esto, así que lo configuramos en “no.”
A continuación, encuentra la línea “UsePAM” y cámbiala a “no.” Esto evitará que el demonio use cualquier método de autenticación (contraseña, Kerberos, etc.) que no sea claves SSH.
UsePAM no

Guarda el archivo presionando Ctrl + O, luego Ctrl + X y recarga el servidor SSH.
sudo systemctl restart ssh
Ahora que has configurado con éxito tu servidor para usar solo claves SSH para la autenticación, cualquier persona que intente iniciar sesión sin una clave RSA válida será denegada de inmediato.

Preguntas Frecuentes
Estoy recibiendo un “Conexión rechazada” cuando envío mi clave SSH a mi servidor Linux. ¿Cómo lo soluciono?
Asegúrate de que el servidor SSH esté en funcionamiento en el host remoto. Puedes verificar esto ejecutando sudo systemctl status ssh. Si el servicio no está en funcionamiento, puedes iniciarlo con este comando: sudo systemctl start ssh.
Si hay un firewall en el servidor, asegúrate de que el puerto 22 esté abierto. Puedes hacer esto ejecutando sudo ufw status. Si SSH no está listado, puedes habilitarlo ejecutando este comando: sudo ufw allow ssh.
Recibo un error “Permiso denegado (clave pública)” cuando intento iniciar sesión. ¿Qué debo hacer?
Este error significa que has configurado tu servidor para usar claves para la autenticación, pero aún intentas iniciar sesión con una contraseña. Esto puede deberse a una clave RSA faltante o a una configuración SSH incorrecta. Verifica que hayas copiado tu clave pública al servidor correctamente y que estés especificando la clave pública correcta cuando te conectes.
Recibo un error “Verificación de clave de host fallida” cuando intento conectarme. ¿Cómo lo soluciono?
Este error significa que la clave de host del servidor SSH ha cambiado. Puede suceder si el servidor ha sido reinstalado. Puedes regenerar una nueva clave pública y copiarla al host remoto. Repite los pasos en este artículo para regenerar y agregar la nueva clave al servidor.
¿Es posible usar múltiples claves SSH en el mismo servidor Linux remoto?
Sí. Puedes usar la opción -f en OpenSSH para especificar la clave exacta que deseas usar para conectarte a un servidor remoto. Por ejemplo, ejecutar ssh -f ~/.ssh/id_rsa_2 username@remote_ip_address te conectará a tu servidor remoto usando la clave “id_rsa_2” en lugar de la “id_rsa” predeterminada.
Sin embargo, es importante tener en cuenta que este comando solo funcionará si tu servidor remoto ya reconoce tu nueva clave. Primero necesitas copiarla a tu servidor remoto usando ssh-copy-id. Similar a los pasos anteriores, puedes hacer esto ya sea a través de autenticación por contraseña o clave RSA.
Estoy recibiendo un error “Permiso denegado” cada vez que intento copiar mi clave SSH a mi servidor.
Este problema es muy probablemente debido a un problema de permisos en tu servidor remoto. En la mayoría de los casos, la utilidad ssh-copy-id debería resolver correctamente cualquier problema de acceso tan pronto como se conecte a tu servidor remoto. Sin embargo, hay instancias en las que esta función falla y no copia correctamente el “id_rsa” de tu máquina local.
Para solucionar esto, inicia sesión en tu servidor remoto y ejecuta chmod 700 /home/$USER/.ssh/* && chmod 600 /home/$USER/.ssh. Esto establecerá los bits de permiso correctos tanto para la carpeta “.ssh” como para su contenido.
Crédito de la imagen: Unsplash. Todas las alteraciones y capturas de pantalla por Ramces Red.