Mensaje de error
Load key "/path/to/key": error in libcrypto
También se muestra como
- error in libcrypto
La ruta es la del archivo de clave utilizado. Algunos daños producen en su lugar «Load key "…": invalid format» (por ejemplo, en claves PEM a las que les falta una línea intermedia); las causas se solapan.
OpenSSH (ssh, ssh-add, ssh-keygen, git over SSH) — key file could not be parsed
Qué significa
OpenSSH no pudo analizar el archivo de la clave privada en su propio formato y se lo pasó a OpenSSL (libcrypto) como clave PEM, lo que también falló; por eso el error notificado es el genérico «error in libcrypto» y no un motivo concreto. En el OpenSSH actual (comprobado con la 10.0), casi cualquier daño en un archivo `OPENSSH PRIVATE KEY` acaba aquí: finales de línea de Windows, la falta del salto de línea final, una línea perdida o una clave aplanada en una sola línea. Las claves PEM/PKCS#8 dañadas llegan aquí cuando están truncadas o aplanadas, y también los archivos `.ppk` de PuTTY.
Por qué ocurre
Finales de línea de Windows (CRLF)
frecuenteLas claves pegadas en campos de secretos de la CI, editadas en Windows o extraídas del repositorio con `core.autocrlf` acaban con finales de línea `\r\n`. Entonces las claves en formato OpenSSH no se pueden analizar.
Se recortó el salto de línea final
frecuenteMuchos almacenes de secretos y construcciones como `echo -n`/`$(...)` eliminan el salto de línea final. En las claves en formato OpenSSH, esto basta por sí solo para que la carga falle.
Líneas perdidas, truncadas o unidas
frecuenteVariables de entorno que convierten los saltos de línea en espacios, claves copiadas y pegadas desde un chat o límites de tamaño que cortan la clave.
No es una clave OpenSSH ni PEM
ocasionalLos archivos `.ppk` de PuTTY, las claves públicas, los certificados o las JWK indicados como archivos de identidad no son claves privadas que OpenSSH pueda leer.
Cómo solucionarlo
- 1.
Escribir las claves de la CI exactas, byte a byte
Elimina los `\r`, termina con un salto de línea, establece el modo 600 y prueba enseguida con `ssh-keygen -y`, para que un secreto dañado haga fallar claramente el paso de preparación.
bash # CI: write the key exactly, normalise line endings, guarantee the final newline, restrict permissions install -d -m 700 ~/.ssh printf '%s\n' "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 ssh-keygen -y -f ~/.ssh/id_ed25519 > /dev/null && echo "key parses" - 2.
Revisar la estructura del archivo
`file`, la primera línea y los últimos bytes muestran al instante los finales CRLF, la falta del salto de línea o una clave en una sola línea.
bash file ~/.ssh/id_ed25519 # "OpenSSH private key" vs "with CRLF line terminators" head -1 ~/.ssh/id_ed25519; tail -c 40 ~/.ssh/id_ed25519 | od -c | tail -3 # framing and final "\n" wc -l ~/.ssh/id_ed25519 # a one-line file means the newlines were lost