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.
No hay comentarios:
Publicar un comentario