sábado, 11 de julio de 2026

Guía paso a paso: Repara la conexión SSH bloqueada en tu Raspberry Pi sin usar contraseñas

Configurar una conexión SSH mediante llaves con una Raspberry Pi es ideal para automatizar tareas, pero a veces el comando se queda congelado sin dar ninguna explicación. Si te ha pasado que al ejecutar tu comando ssh -i la terminal se congela por completo, en esta guía te muestro paso a paso cómo diagnosticamos y solucionamos este problema definitivamente.

1. El Síntoma: SSH congelado

El problema inicial comenzó al intentar conectar a la Raspberry Pi con el siguiente comando, el cual se quedaba colgado indefinidamente:

ssh -i ~/.ssh/id_ed25519_rpi pi@mi-raspberry.local

2. El Diagnóstico con el Modo Verboso

Para averiguar qué estaba pasando, activamos el modo de depuración máxima añadiendo la opción -vvv:

ssh -vvv -i ~/.ssh/id_ed25519_rpi pi@mi-raspberry.local

El registro de la terminal mostró que la red funcionaba y el servidor aceptaba la llave, pero se colgaba exactamente en este punto:

debug1: Server accepts key: rpi-sync ED25519 SHA256:...
debug3: sign_and_send_pubkey: signing using ssh-ed25519...

Esto nos indicó que el agente SSH local (ssh-agent) se había quedado colgado o corrupto en segundo plano al intentar firmar digitalmente el desafío de autenticación.

3. La Solución: Matar el proceso y reiniciar el Agente

Para solucionar el bloqueo de raíz, tuvimos que limpiar las llaves conflictivas de la memoria y reiniciar el proceso del agente SSH en la máquina local ejecutando estos comandos:

# Vacía todas las llaves cargadas en el agente corrupto
ssh-add -D

# Mata el proceso anterior e inicia una nueva instancia limpia del agente
eval "$(ssh-agent -s)"

Para verificar la conexión de forma inmediata sin interferencias del agente antiguo, también se puede forzar temporalmente a SSH a leer el archivo físico de la llave ignorando el agente con el parámetro IdentitiesOnly=yes:

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519_rpi pi@mi-raspberry.local

4. Automatización con el archivo SSH Config

Escribir un comando tan largo cada vez es molesto. Para solucionarlo de forma permanente y evitar que el agente vuelva a intentar usar llaves incorrectas, editamos el archivo de configuración SSH de nuestro usuario:

nano ~/.ssh/config

Añadimos el siguiente bloque para crear un alias y automatizar los parámetros correctos:

Host rpi-servidor
    HostName mi-raspberry.local
    User pi
    IdentityFile ~/.ssh/id_ed25519_rpi
    IdentitiesOnly yes
    PubkeyAuthentication yes

Para garantizar que el sistema respete este archivo por motivos de seguridad, ajustamos sus permisos:

chmod 600 ~/.ssh/config

¡Listo! Con esto, ahora podemos conectarnos a la Raspberry Pi usando simplemente un comando muy corto:

ssh rpi-servidor

5. Paso Final: Eliminar o Gestionar la Contraseña de la Llave

Al simplificar el comando, el sistema comenzó a solicitar la frase de paso (passphrase) local de la llave: Enter passphrase for key....

Si prefieres una conexión 100% directa y automática sin introducir contraseñas, puedes remover la protección de la clave privada con el siguiente comando (dejando la nueva contraseña en blanco cuando lo solicite):

ssh-keygen -p -f ~/.ssh/id_ed25519_rpi

¡Y eso es todo! Ahora la conexión es instantánea, segura y súper cómoda gracias a que limpiamos el agente corrupto y estructuramos el archivo de configuración.