¿Qué significa "key_load_public: no existe tal archivo o directorio"?

42

He estado solucionando un PubkeyAuthenticationproblema solo. Cuando uso el modo detallado, veo mucho "key_load_public: no existe tal archivo o directorio" .

Obviamente, las claves existen en el sistema de archivos, por lo que ese mensaje no parece tener un significado habitual:

$ ls -al ~/.ssh/id_*
-rw-------  1 jwalton  staff   751 Feb  4  2013 id_dsa
-rw-------  1 jwalton  staff   608 Feb 18  2015 id_dsa.pub
-rw-------  1 jwalton  staff   314 Feb  4  2013 id_ecdsa
-rw-------  1 jwalton  staff   180 Feb 18  2015 id_ecdsa.pub
-rw-------  1 jwalton  staff   464 Aug 23 18:15 id_ed25519
-rw-------  1 jwalton  staff   103 Aug 23 18:15 id_ed25519.pub
-rw-------  1 jwalton  staff  2546 Feb  4  2013 id_rsa
-rw-------  1 jwalton  staff   572 Feb 18  2015 id_rsa.pub

¿Qué significa exactamente "key_load_public: no existe tal archivo o directorio" ?


Mi .ssh/configarchivo tiene:

$ cat ~/.ssh/config
IdentityFile ~/.ssh/id_ed25519
IdentityFile ~/.ssh/id_ecdsa
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/id_rsa

Agregar la *.pubextensión no tiene ningún efecto. Intenté con y sin *.pubporque la página de manual es ambigua con respecto a qué clave debe especificarse: pública o privada. (Una clave pública es todo lo que se necesita para una identidad; se necesita una clave privada para demostrar la propiedad de la clave en un desafío / respuesta):

IdentityFile
    Specifies a file from which the user's DSA, ECDSA or DSA authen-
    tication identity is read...

$ ssh -v -p 1522 [email protected]
OpenSSH_7.1p1, OpenSSL 1.0.2d 9 Jul 2015
debug1: Reading configuration data /Users/jwalton/.ssh/config
debug1: Reading configuration data /usr/local/etc/ssh_config
debug1: Connecting to 192.168.1.11 [192.168.1.11] port 1522.
debug1: Connection established.
debug1: identity file /Users/jwalton/.ssh/id_ed25519.pub type 4
debug1: key_load_public: No such file or directory
debug1: identity file /Users/jwalton/.ssh/id_ed25519.pub-cert type -1
debug1: identity file /Users/jwalton/.ssh/id_ecdsa.pub type 3
debug1: key_load_public: No such file or directory
debug1: identity file /Users/jwalton/.ssh/id_ecdsa.pub-cert type -1
debug1: identity file /Users/jwalton/.ssh/id_dsa.pub type 2
debug1: key_load_public: No such file or directory
debug1: identity file /Users/jwalton/.ssh/id_dsa.pub-cert type -1
debug1: identity file /Users/jwalton/.ssh/id_rsa.pub type 1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/jwalton/.ssh/id_rsa.pub-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.1
...
jww
fuente

Respuestas:

66

Significa literalmente lo que dice: no existe tal archivo o directorio al que ssh quisiera acceder.

Sin embargo, habla sobre el archivo mencionado a continuación , no arriba. Solo tiene las claves públicas regulares, pero no tiene los certificados SSH para ellas (presumiblemente porque simplemente no las necesita). Sin embargo, OpenSSH siempre intentará cargar el .pub-certarchivo asociado para cada clave de identidad.


El manual ssh-keygen (1) habla sobre la creación de una autoridad de certificación OpenSSH y la firma de certificados, en caso de que esté interesado. (Nota: esto no usa X.509, solo el formato cert de OpenSSH).

Por lo general, los certificados solo son útiles si tiene una gran cantidad de usuarios (y / o servidores) pero no desea usar Kerberos.

Gravedad
fuente
Gracias Grawity ¿Para IdentityFilequé debo especificar? ¿La clave pública o la clave privada?
jww
Debe ser el archivo de clave privada (que en realidad contiene todo el par de claves; el .pubarchivo adicional es solo para [tipo de] conveniencia).
Grawity
55
Ooph, ahora eso es confuso. Alguien realmente debería presentar un informe de error :-(
einpoklum - reinstalar Monica
1
Si por "presentar un informe de error" quiere decir "enviar la solución", no dude en hacerlo: github.com/openssh/openssh-portable/blob/master/README#L38 :). Aquí hay un lugar para comenzar a buscar: github.com/openssh/openssh-portable/blob/master/key.c#L342 y github.com/openssh/openssh-portable/blob/master/ssh.c#L2091 .
Alexander Bird
12
A veces "informe de error" significa literalmente "informe de error". No todos los usuarios de openssh son programadores en C.
Grawity