SSH Devuelve repentinamente formato inválido

23

Así que hace un tiempo configuré un servidor en AWS y usé su clave SSH generada. Guardé la clave en Lastpass, la recuperé con éxito antes y la puse a funcionar. Sin embargo, después de intentarlo de nuevo hoy, no puedo hacer que funcione.

-rw------- 1 itsgreg users 1674 Jun 6 12:51 key_name

Lo he intentado ssh -i key_name, ssh-keygen -f key_namepero nada funciona, siempre recibo este mensaje de error:

Load key "key_name": invalid format

¿Hay alguna forma de arreglar esto?

Gregor Menih
fuente

Respuestas:

13

Compruebe el contenido de key_name, si el agente dice invalid format, entonces hay algo mal con la clave, como ... ¿está seguro de que es la clave correcta? Incluso si no es la clave privada que necesita, el agente ssh no regresará invalid formatsi la clave está funcionando, simplemente no podrá conectarse. Es posible que haya colocado su clave pública allí, por alguna razón. ¡Revisalo!

13dimitar
fuente
55
Definitivamente comprobado. Comienza con ----BEGIN RSA PRIVATE KEY-----y termina con -----END RSA PRIVATE KEY-----. Además, solía funcionar.
Gregor Menih
2
Una muy poco probable, pero aún posible, es que el archivo esté dañado. Cree uno nuevo y vuelva a llenar el contenido desde lastpass.
13dimitar
2
Wow, eso realmente ayudó! Después de generar la nueva clave, noté que la nueva clave tenía 64 caracteres por línea, mientras que mi clave anterior tenía 76. Reformatee mi clave anterior para que solo tuviera 64 caracteres por línea, ¡luego comenzó a funcionar! También me faltaba un guión de la primera línea.
Gregor Menih
2
"También me faltaba un guión de la primera línea". Ídem. Gracias @ItsGreg por eso. ¡Extraño el primer carácter tan a menudo al seleccionar y copiar entre terminales!
Starfry
15

Lo que hice para solucionar este problema es que uso para convertir el archivo PPK usando PuttyGen.

Primero cargue el urkey.PPK, luego en el menú de conversión, haga clic en exportar al formato de archivo Openssh. Creará un archivo de nueva clave.

ahora, ssh -i "newkey" [email protected]

Hecho. Espero eso ayude.

Ras
fuente
4

Le estaba pidiendo a openssh que usara un archivo de identidad en particular al especificarlo en el archivo .ssh / config.

La configuración de trabajo original tenía

IdentityFile = <path to public key file> 

Esto dejó de funcionar sin ningún cambio. Pensándolo un poco, reemplacé la "ruta al archivo de clave pública" anterior por "ruta al archivo de clave privada". Eso funciono. El razonamiento es que los archivos de clave pública y privada tienen grandes números relacionados con peudoprime según el algoritmo RSA. Si reemplaza el archivo de clave privada por un archivo de clave pública, estos números criptográficos no se extraerán correctamente del bloque base64 guardado dentro de los archivos de clave. Parece que algunas versiones de ssh pueden descubrir la extensión .pub y usarla para identificar el archivo de clave privada correcto, y otras versiones no lo hacen. Esta es otra forma en que puede ocurrir este error. Espero que ayude a alguien.

vpathak
fuente
En mi caso, tenía un configarchivo de configuración path_to_public_keyy todo funcionaba. Sin embargo, cuando el mac se reinició por completo y, unos días después, intenté hacerlo git push, comencé a recibir el error mencionado anteriormente. Pero cuando lo cambié a path_to_private_keycosas, las cosas funcionan ... Hmmm. No estoy seguro de por qué ..
lukik
3

Tuve el mismo problema, y ​​resultó que tenía separadores de línea de estilo Windows (CRLF) en el archivo por alguna razón.

Además, el archivo debe terminar con un solo LF.

Arreglar esas cosas hechas dandy de nuevo.

AKX
fuente
Es sorprendente que ese LF final sea tan necesario, pero en realidad fue parcialmente el problema, y ​​la otra parte es que creé el archivo en Windows y al hacerlo le da saltos de línea CRLF. Para referencia de otros, dos2unixes el comando para convertir saltos de línea CRLF (estilo Windows) a LF (estilo Linux).
Hashim
1

Debe convertir su clave .ppk en clave OpenSSH

Así es como lo haces :

  1. Descargue PuttyGen y genere su par de claves (si no tiene un par de claves listo). Guardar clave privada en su carpeta (.ppk)
  2. Si ya tiene la clave privada, cargue el archivo de clave privada (.ppk) presionando el botón "Cargar". De lo contrario, omita este paso
  3. En el menú "Conversiones", elija Exportar clave OpenSSH y guárdelo en su carpeta
  4. Ahora está listo para usar la clave para iniciar sesión en su servidor sin escribir la contraseña (supongo que ya puso la clave pública en /root/.ssh/authorized_keys, chmod 600 /root/.ssh/authorized_keys, y reinició el demonio SSH)
Dylan B
fuente
1

Me encontré con esto hoy cuando estaba escribiendo algunas utilidades de etiquetado git para mi canalización de CI.

Aquí estaba la diferencia entre mis dos llaves:

$ diff ~/.ssh/gitlab ~/.ssh/git_ssh_key
27c27
< -----END OPENSSH PRIVATE KEY-----
---
> -----END OPENSSH PRIVATE KEY-----
\ No newline at end of file

Cambié mi código así:

     with open(ssh_key_file, 'w') as skf:
-        skf.write(ssh_key)
+        skf.write(ssh_key + '\n')

Y ahora mi clave ssh funciona.

TL; DR: supongo que debe tener una nueva línea al final de su clave privada.

Robert J
fuente
1

En mi caso, resultó que tenía nuevas líneas entre los "encabezados" de inicio / fin y los datos clave:

-----BEGIN RSA PRIVATE KEY-----

- Key data here -

-----END RSA PRIVATE KEY-----

Eliminando las nuevas líneas adicionales, por lo que se convirtió

-----BEGIN RSA PRIVATE KEY-----
- Key data here -
-----END RSA PRIVATE KEY-----

resuelto mi problema

usuario50849
fuente
0

Use su clave privada en lugar de la clave pública.

Ricardo
fuente
misma solución que mi respuesta - donde también se agrega una explicación
vpathak
0

Tuve este problema porque tenía una clave en ~ / .ssh que en realidad era un formato no válido y tenía muchas claves, lo que significaba que SSH las estaba probando todas, aunque especifiqué mi archivo de identidad en el comando. Simplemente falla porque creo que solo puede probar 5 teclas, y luego me dejó con ese error, que era legítimo, solo por el archivo de identidad incorrecto. La solución fue simplemente usar IdentitiesOnly yesen mi ~ / .ssh / config.

Elijah Lynn
fuente
0

Tuve este error porque había una línea en blanco al comienzo del archivo de clave. Fácil de perder si lo estás catsacando.

Elijah Lynn
fuente
0

Este también es el error que ssh (al menos algunas versiones) emite si tiene una frase de contraseña en su clave privada e ingrese la frase de contraseña incorrecta cuando intente conectarse.

(En particular, esto me sucedió con: OpenSSH_7.6p1, LibreSSL 2.6.2, que es el SSH incorporado para Mac OS X 10.13.6).

Por lo tanto, verifique que esté usando la frase de contraseña correcta y que BLOQ MAYÚS esté desactivado.

usuario ssh en os x
fuente
-2

Asegúrese de cambiar el nombre de su clave PRIVADA y eliminar la extensión del archivo que es el problema.

Pasos que tomé

Crea tu clave pública:

Asegúrese de estar en el mismo directorio que tiene la clave privada

Cómo crear la clave pública:

ssh-keygen -y -f Private-Key.pem > Public-key.pub

asegúrese de que la clave PUBLIC tenga una extensión de archivo .pub

después de eso, proporcione los permisos adecuados por razones de seguridad:

chmod 600 Private-Key.pem
chmod 400 Public-key.pub

ENTONCES la parte más importante y la razón por la que recibió el error "formato no válido"

Asegúrese de cambiar el nombre de su clave PRIVADA y eliminar la extensión del archivo:

Elimine el .pem de su clave privada.

mv Private-Key.pem Private-Key

o si en una computadora con Windows cambia el nombre de la clave privada, el mismo nombre simplemente elimina el .pem

SICKFREDO
fuente