Co oznacza „key_load_public: brak takiego pliku lub katalogu”?

42

Byłem rozwiązywania PubkeyAuthentication-tylko problem. Kiedy używam trybu pełnego , widzę dużo „public_load_public: brak takiego pliku lub katalogu” .

Oczywiście klucze wychodzą z systemu plików, więc komunikat nie wydaje się mieć zwykłego znaczenia:

$ 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

Co dokładnie oznacza „key_load_public: brak takiego pliku lub katalogu” ?


Mój .ssh/configplik ma:

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

Dodanie *.pubrozszerzenia nie ma wpływu. Próbowałem zarówno z, jak i bez, *.pubponieważ strona podręcznika jest niejednoznaczna w odniesieniu do tego, który klucz należy określić - publiczny lub prywatny. (Klucz publiczny jest wszystkim, czego potrzeba do tożsamości; klucz prywatny jest potrzebny do udowodnienia własności klucza w wyzwaniu / odpowiedzi):

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
źródło

Odpowiedzi:

66

Oznacza dosłownie to, co mówi: nie ma takiego pliku lub katalogu, do którego ssh chciałby uzyskać dostęp.

Mówi jednak o pliku wymienionym poniżej , a nie powyżej. Masz tylko zwykłe klucze publiczne, ale nie masz dla nich certyfikatów SSH (prawdopodobnie dlatego, że po prostu ich nie potrzebujesz). Jednak OpenSSH zawsze będzie próbował załadować skojarzony .pub-certplik dla każdego klucza tożsamości.


Podręcznik ssh-keygen (1) mówi o tworzeniu urzędu certyfikacji OpenSSH i podpisywaniu certyfikatów, jeśli jesteś zainteresowany. (Uwaga: nie używa X.509, tylko własny format certyfikatu OpenSSH.)

Zwykle certyfikaty są przydatne tylko wtedy, gdy masz ogromną liczbę użytkowników (i / lub serwerów), ale nie chcesz używać Kerberos.

grawitacja
źródło
Dzięki Grawity. Po IdentityFileco mam określić? Klucz publiczny czy klucz prywatny?
jww
Powinien to być plik klucza prywatnego (który faktycznie zawiera całą parę kluczy - dodatkowy .pubplik służy tylko [dla wygody]).
grawity
5
Och, teraz to mylące. Ktoś naprawdę powinien zgłosić błąd :-(
einpoklum - przywróć Monikę
1
Jeśli przez „zgłoś błąd” masz na myśli „prześlij poprawkę”, możesz to zrobić: github.com/openssh/openssh-portable/blob/master/README#L38 :). Oto miejsce, w którym możesz zacząć szukać: github.com/openssh/openssh-portable/blob/master/key.c#L342 i github.com/openssh/openssh-portable/blob/master/ssh.c#L2091 .
Alexander Bird
12
Czasami „raport o błędzie” dosłownie oznacza „raport o błędzie”. Nie każdy użytkownik openssh jest programistą C.
grawitacja