key_load_public: formato no válido

98

Usé PuTTY Key Generator para generar una clave RSA-2 de 4096 bits con una frase de contraseña.

Guardo el .ppk y una clave pública en formato openSSL. La clave pública del formato de masilla no funciona.

En cualquier caso, mi error es el siguiente:

$ ssh -T [email protected]
key_load_public: invalid format
Enter passphrase for key '/c/Users/Dan/.ssh/id_rsa':
Hi Dan! You've successfully authenticated, but GitHub does not provide shell access.

¿Cual es el problema?

Uso Pageant para cargar las claves y uso Git Bash para probar la conexión ssh. También cargué la clave en GitHub, no estoy seguro de qué estoy haciendo mal.

Intenté agregar una nueva línea y no agregar una nueva línea en GitHub

JordanGS
fuente
¿Por qué crees que no funciona? Dice autenticado correctamente .
Roland Smith
2
@RolandSmith ¿Me está diciendo key_load_public: invalid formatjusto cuando ejecuto el comando antes de ingresar la frase de contraseña?
JordanGS
1
Haga: 'ssh -vvv -T [email protected]' para obtener más información, probablemente ~ / .ssh / known_hosts sea malo: ssh está buscando la clave pública de github. Puede ejecutar 'clave de archivo' para averiguar el formato del archivo de clave.
mosh

Respuestas:

181

Como Roland mencionó en su respuesta, es una advertencia de que ssh-agentno entiende el formato de la clave pública e incluso entonces, la clave pública no se utilizará localmente.

Sin embargo, también puedo elaborar y responder por qué la advertencia está ahí. Simplemente se reduce al hecho de que PuTTY Key Generator genera dos formatos de clave pública diferentes dependiendo de lo que haga en el programa.

Nota: A lo largo de mi explicación, los archivos clave que usaré / generaré serán nombrados id_rsacon sus extensiones apropiadas. Además, para la conveniencia de copiar y pegar, se asumirá que la carpeta principal de las claves es ~/.ssh/. Ajuste estos detalles para satisfacer sus necesidades como desee.

Los formatos

Enlace a la documentación PuTTY relevante

SSH-2

Cuando guarde una clave utilizando el generador de claves PuTTY utilizando el botón "Guardar clave pública", se guardará en el formato definido por RFC 4716 .

Ejemplo:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "github-example-key"
AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYF
i2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcp
pY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3
oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEA
ip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9
tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw==
---- END SSH2 PUBLIC KEY ----

OpenSSH

Contrariamente a la creencia popular, el generador no guarda este formato. Sin embargo, se genera y se muestra en el cuadro de texto titulado "Clave pública para pegar en el archivo de claves autorizadas de OpenSSH". Para guardarlo como un archivo, debe copiarlo manualmente desde el cuadro de texto y pegarlo en un nuevo archivo de texto.

Para la clave que se muestra arriba, esto sería:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw== github-example-key

El formato de la clave es simple ssh-rsa <signature> <comment>y se puede crear reorganizando el archivo con formato SSH-2.

Regeneración de claves públicas

Si está utilizando ssh-agent, probablemente también tendrá acceso a ssh-keygen.

Si tiene su clave privada de OpenSSH ( id_rsaarchivo), puede generar el archivo de clave pública de OpenSSH usando:

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

Si solo tiene la clave privada PUTTY ( id_rsa.ppkarchivo), primero deberá convertirla.

  1. Abra el generador de claves PuTTY
  2. En la barra de menú, haga clic en "Archivo"> ​​"Cargar clave privada"
  3. Seleccione su id_rsa.ppkarchivo
  4. En la barra de menú, haga clic en "Conversiones"> "Exportar clave OpenSSH".
  5. Guarde el archivo como id_rsa(sin extensión)

Ahora que tiene una clave privada OpenSSH, puede usar la ssh-keygenherramienta como se indica arriba para realizar manipulaciones en la clave.

Bono: el formato de clave pública PKCS # 1 codificado en PEM

Para ser honesto, no sé para qué se usa esta clave, ya que no la he necesitado. Pero lo tengo en mis notas que he recopilado a lo largo de los años y lo incluiré aquí por pura bondad. El archivo se verá así:

-----BEGIN RSA PUBLIC KEY-----
MIIBCAKCAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5Ew
gnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8D
Gm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48
ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8
hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D
6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElwIBJQ==
-----END RSA PUBLIC KEY-----

Este archivo se puede generar usando una clave privada OpenSSH (como se generó en "Regeneración de claves públicas" arriba) usando:

ssh-keygen -f ~/.ssh/id_rsa -y -e -m pem > ~/.ssh/id_rsa.pem

Alternativamente, puede usar una clave pública OpenSSH usando:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m pem > ~/.ssh/id_rsa.pem

Referencias:

samthecodingman
fuente
Cuando convierte su clave privada en una clave OpenSSH, en mi opinión, es recomendable dejar el archivo sin extensión y no es preferible. Mi git-client no se conecta al repositorio remoto cuando se usa una extensión para la clave privada.
Programador,
@ Programmer1994 Las instrucciones de conversión se incluyeron como pasos para convertir el archivo en .ppkun .pubarchivo. Se id_rsapasó por alto el efecto secundario de la clave privada intermediaria que realmente utiliza otro programa. He cambiado el idioma "preferiblemente sin extensión" a "(sin extensión)" para eliminar cualquier ambigüedad. También aproveché la oportunidad para reformular algunas quejas que surgen cada vez que miro hacia atrás en esta respuesta. Gracias por tu contribución.
samthecodingman
Gracias por la respuesta. Usé el comando en la sección de su respuesta "Regeneración de claves públicas" y resolvió mi problema.
desmond13
hablaste de claves públicas. pero el problema se genera a partir de una clave privada id_rsa. Recibo la misma advertencia cuando uso mi clave ssh privada cuando intento acceder a un servidor git a través de ssh.
ahnbizcad
5
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pubesto lo resolvió. ¡GRACIAS!
Dwza
15

Existe una solución simple si puede instalar y utilizar la herramienta puttygen. A continuación se muestran los pasos. Debe tener la contraseña de la clave privada.

paso 1: descargue la última versión de puttygen y abra puttygen

paso 2: Cargue su archivo de clave privada existente, vea la imagen a continuación

Cargar una clave privada existente

Paso 3: ingrese la contraseña para la clave si se le solicita y presione Aceptar

ingrese paasfrase

paso 4: como se muestra en la imagen de abajo, seleccione la pestaña de menú "conversión" y seleccione "Exportar clave OpenSSH"

guardar archivo OpenSSH

Guarde el nuevo archivo de clave privada en la ubicación preferida y utilícelo en consecuencia.

PradeepNama
fuente
2
Recibí la load pubkey invalid formatadvertencia cuando exporté la clave con Exportar clave OpenSSH . Desapareció al usar la tecla Exportar OpenSSH (forzar un nuevo formato de archivo) .
elsamuko
En linux, apt install putty-toolso yum install puttyluegosudo puttygen private.ppk -O private-openssh-new -o private.pem
Typel hace
8

TL; DR: también asegúrese de que id_rsa.pubesté en ascii / UTF-8.

Tuve el mismo problema, sin embargo, la respuesta aceptada por sí sola no funcionó debido a la codificación del texto, que era un problema adicional fácil de perder.

Cuando corro

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

en Windows PowerShell, guarda la salida id_rsa.puben codificación UTF-16 LE BOM , no en UTF-8 . Esta es una propiedad de algunas instalaciones de PowerShell, que se analizó en Uso de PowerShell para escribir un archivo en UTF-8 sin la lista de materiales . Aparentemente, OpenSSH no reconoce la codificación de texto anterior y produce un error idéntico:

key_load_public: invalid format

Copiar y pegar la salida de ssh-keygen -f ~/.ssh/id_rsa -yen un editor de texto es la forma más sencilla de resolver esto.

PD: Esto podría ser una adición a la respuesta aceptada , pero todavía no tengo suficiente karma para comentar aquí.

hojas de papel
fuente
1
Como descubrió, las tuberías funcionan de manera diferente en Powershell. Usarías en su ssh-keygen -f ~/.ssh/id_rsa -y | ac ~/.ssh/id_rsa.publugar.
samthecodingman
7

En el caso de que copie su clave pública con el portapapeles y la pegue, puede suceder que la cadena de clave pública se rompa y contenga una nueva línea.

Asegúrese de que su cadena de clave pública esté formada como una línea.

Hojin Choi
fuente
5

Parece que sshno puede leer su clave pública. Pero eso no importa.

Subes tu clave pública a github, pero te autenticas usando tu clave privada . Consulte, por ejemplo, la sección ARCHIVOS en ssh(1).

Roland Smith
fuente
2
En resumen, vaya a putty key gen, haga clic en conversiones -> abrir clave ssh y guárdelo en id_rsa - asegúrese de que su variable de entorno HOME apunte a la carpeta .ssh que está viendo, elimine todas las demás copias del archivo id_rsa de su sistema
Kalpesh Soni
2

En lugar de guardar directamente la clave privada, vaya a Conversiones y Exportar clave SSh. Tuve el mismo problema y esto funcionó para mí

Jignesh Rawal
fuente
1

Tuve la misma advertencia. Era una llave muy antigua. Regeneré una clave en el OpenSSH 7 actual y el error desapareció.

Arberg
fuente
1

El error es engañoso: dice " pubkey" mientras apunta a un archivo de clave privada ~/.ssh/id_rsa.

En mi caso, era simplemente una clave pública faltante (ya que no la he restaurado desde una bóveda).


DETALLES

Solía ​​omitir la implementación ~/.ssh/id_rsa.pubmediante scripts automatizados.

Todos los sshusos funcionaron, pero el error me hizo pensar en un posible lío.

Para nada, straceayudó a notar que el disparador era en realidad el *.pubarchivo:

strace ssh example.com
...
openat(AT_FDCWD, "/home/uvsmtid/.ssh/id_rsa.pub", O_RDONLY) = -1 ENOENT (No such file or directory)
...
write(2, "load pubkey \"/home/uvsmtid/.ssh/"..., 57) = 57
load pubkey "/home/uvsmtid/.ssh/id_rsa": invalid format
uvsmtid
fuente
0

Entonces, después de la actualización tuve el mismo problema. Estaba usando PEM key_filesin extensión y simplemente agregando .pemsolucionó mi problema. Ahora el archivo es key_file.pem.

furang
fuente
0

Si está utilizando Windows 10 con SSH integrado, a partir de agosto de 2020 solo admite claves ed25519. Obtendrá el key_load_public: invalid formaterror si usa, por ejemplo, una clave RSA.

Según este problema de GitHub , debería solucionarse a través de Windows Update en algún momento de 2020. Por lo tanto, una solución es esperar a que se envíe la actualización.

Si no puede esperar, una solución es generar una nueva clave ed25519, lo cual es un buen consejo de todos modos .

> ssh-keygen -o -a 100 -t ed25519

Puede usarlo, por ejemplo, con github, pero es posible que algunos sistemas más antiguos no admitan este formato más nuevo.

Después de generar su clave, si está utilizando cualquiera de las siguientes funciones, ¡no olvide actualizarlas!

  1. ~\.ssh\config aún podría apuntar a la clave anterior.
  2. Agregue la nueva clave a ssh-agent mediante el ssh-addcomando
Será
fuente