Admito que não tenho conhecimento do funcionamento interno do keychain, mas é completamente razoável que um agente ssh local fique chateado por não ter uma chave pública que corresponda a uma chave privada que tenha.
Considere o que acontece quando você se aproxima de um servidor remoto para autenticar. O servidor remoto sabe, de seu arquivo authorized_keys
, que está preparado para aceitar um cliente que possa provar que possui a chave privada correspondente a cada entrada. Mas como é que isso pede ao cliente? Não pode dar a cada chave privada, nem qualquer propriedade dela, porque ela não a possui; tudo o que pode fazer é apresentar as chaves públicas, ou impressões digitais, que aceitará.
Se o cliente tiver qualquer uma dessas chaves públicas, ele poderá selecionar imediatamente a chave privada correspondente e fazer uma resposta que o servidor aceitará como correta. Se não tiver essas chaves públicas, o que fazer? Tente todas as chaves privadas em seu repertório, por sua vez? Uma receita melhor para divulgação insegura de informações dificilmente poderia ser imaginada; um black-hat teria apenas que configurar um ataque man-in-the-middle em uma única nova conexão para coletar respostas legítimas de todas as chaves do seu chaveiro.
É possível que os keypairs tenham algum tipo de numeração interna, mas isso seria completamente arbitrário e imprudente. Não há nenhuma propriedade interna garantida que vincule uma chave privada e pública, porque não há nada compartilhado pelas chaves em um par de chaves, exceto que uma é (espero) a única entidade que pode desfazer o que a outra faz.
Não, a melhor maneira de o cliente selecionar a chave privada certa para usar em qualquer servidor é ter as chaves públicas correspondentes para auxiliá-lo na seleção das chaves.