Isso pode ser um bug no OpenSSH ou a chave no authorized_keys
do servidor e sua chave privada não correspondem. Quando a autenticação é bem sucedida, você obtém
debug1: identity file ./id_rsa type -1
, o que significa que o OpenSSH não pode carregar o arquivo de identidade (acho que chave pública) nesse estágio. No código-fonte na parte de carregamento da chave, há esse trecho ( authfile.c
):
/* try ssh2 public key */
pub = key_new(KEY_UNSPEC);
if (key_try_load_public(pub, filename, commentp) == 1)
return pub;
if ((strlcpy(file, filename, sizeof file) < sizeof(file)) &&
(strlcat(file, ".pub", sizeof file) < sizeof(file)) &&
(key_try_load_public(pub, file, commentp) == 1))
return pub;
Significa que o OpenSSH tentará carregar o que é dado em -i
parameter + ".pub" como uma chave pública e terá sucesso conforme indicado no log. Sem a chave pública com o sufixo ".pub" no diretório atual, isso falhará. Mais tarde, ao fazer a autenticação ( sshconnect2.c
):
/*
* send a test message if we have the public key. for
* encrypted keys we cannot do this and have to load the
* private key instead
*/
if (id->key && id->key->type != KEY_RSA1) {
debug("Offering %s public key: %s", key_type(id->key),
id->filename);
sent = send_pubkey_test(authctxt, id);
} else if (id->key == NULL) {
debug("Trying private key: %s", id->filename);
id->key = load_identity_file(id->filename);
if (id->key != NULL) {
id->isprivate = 1;
sent = sign_and_send_pubkey(authctxt, id);
key_free(id->key);
id->key = NULL;
}
}
Se a chave pública estiver presente, o OpenSSH a enviará como uma mensagem de teste (?) que falhará por algum motivo. Sem chave pública pré-carregada, ela tentará a chave privada e terá sucesso.
Eu não sei porque a falha com a chave pública acontece (se eu tiver tempo, vou tentar descobrir mais). Talvez haja alguma incompatibilidade com os arquivos em .ssh/
que são manipulados em comparação com outros caminhos ou, afinal de contas, há alguma incompatibilidade com suas chaves.