O que significa “key_load_public: nesse arquivo ou diretório”?

42

Estou solucionando um problema PubkeyAuthenticationapenas. Quando uso o modo detalhado, vejo muitos "key_load_public: não existe esse arquivo ou diretório" .

Obviamente, as chaves existem no sistema de arquivos, para que a mensagem não pareça ter um 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

O que exatamente significa "key_load_public: nesse arquivo ou diretório" ?


Meu .ssh/configarquivo tem:

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

Adicionar a *.pubextensão não tem efeito. Eu tentei com e sem, *.pubporque a página de manual é ambígua em relação a qual chave precisa ser especificada - pública ou privada. (Uma chave pública é tudo o que é necessário para uma identidade; uma chave privada é necessária para provar a propriedade da chave em um desafio / resposta):

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
fonte

Respostas:

66

Significa literalmente o que diz: não existe um arquivo ou diretório que o ssh queira acessar.

No entanto, ele fala sobre o arquivo mencionado abaixo , não acima. Você tem apenas as chaves públicas regulares, mas não possui os certificados SSH para elas (presumivelmente porque simplesmente não precisa delas). O OpenSSH, no entanto, sempre tentará carregar o .pub-certarquivo associado para cada chave de identidade.


O manual ssh-keygen (1) fala sobre a criação de uma autoridade de certificação OpenSSH e a assinatura de certificados, caso você esteja interessado. (Nota: isso não usa X.509, apenas o próprio formato de certificado do OpenSSH.)

Normalmente, os certificados são úteis apenas se você tiver uma quantidade enorme de usuários (e / ou servidores), mas não quiser usar o Kerberos.

gravidade
fonte
Obrigado Grawity. Para IdentityFile, o que devo especificar? A chave pública ou a chave privada?
JWW
Deve ser o arquivo de chave privada (que realmente contém todo o par de chaves - o .pubarquivo extra é apenas para [uma espécie de] conveniência).
grawity
5
Ooph, agora isso é confuso. Alguém realmente deve registrar um relatório de erro :-(
einpoklum - reinstala Monica
1
Se por "registrar um relatório de bug" você quer dizer "enviar a correção", sinta-se à vontade para fazê-lo: github.com/openssh/openssh-portable/blob/master/README#L38 :). Aqui está um lugar para começar a procurar: github.com/openssh/openssh-portable/blob/master/key.c#L342 e github.com/openssh/openssh-portable/blob/master/ssh.c#L2091 .
Alexander Bird
12
Às vezes, "relatório de erro" significa literalmente "relatório de erro". Nem todo usuário do openssh é um programador C.
grawity