Diferindo formatos SSH known_hosts

3

Eu tenho tido problemas com a implantação do meu servidor de CI ultimamente devido ao cliente (CI) rejeitar a chave de host do controle remoto (apesar de estar presente em known_hosts ). Fiquei perplexo até hoje, quando percebi que o SSH estava salvando as chaves do host em um formato com o qual o plug-in de implantação não parece ser compatível. Para referência, o formato compatível (ainda presente na minha máquina pessoal) se parece com isso:

11.22.33.44 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCkVf7rhfC7nLxbeIQRj2bWitUC+XLSAeQ0ap8r8rKObDXYfPdB97NZth9JCEt3OrBXuBeg4PaAEuPu2QF7WXoT60hgAP6etr0W4LqcH59yd/X0ogFP7Y7hIf6dz1txDKaW92wgUi5XShwH6vukf0gLvW6/ak1LTBuoy72gaoUvxZge4KZivz9XqvSQHNOG9KYNfh8U6cRM8YTQo5in7YD5d6REV/FUmXpvBzCa9kbVRSlQFGYEc1HidTnPnJDteas3A9y3na385O7WN64aAkg7TO8IFXKdDHSwji9ZyrCVPA5GEuyLKhDFanV8iJ7CNflHMP8TwG5FOT2bSkV0lPyl

Enquanto o formato que o SSH está salvando no momento ao aceitar novas chaves de host é semelhante a:

11.22.33.44 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEJJEs165NgdEcD94Xg3ySFA/qgkfytxNCX1X3pB2SPgU/mHLGXCXM8+VqMBXocM8OMOq2L0fDGr5mI+nGqjhNU=

(Nota: enquanto eu falsifico as chaves públicas um pouco, elas ainda não se parecem em sua forma original).

Apenas o primeiro formato é compatível com o plug-in de implantação, enquanto o segundo é incondicionalmente ignorado. Alguém pode explicar essa discrepância?

    
por caseif 17.01.2016 / 18:28

1 resposta

6

Estes não são formatos diferentes de known_hosts , mas diferentes tipos de chave ( ssh-rsa e ecdsa-sha2-nistp256 - bem descritos na página de manual para sshd ). O servidor geralmente tem mais chaves de host de tipos diferentes para fornecer compatibilidade mais ampla com clientes diferentes.

Se você estiver no servidor, poderá localizar todas as chaves do host e imprimir suas chaves públicas usando, mas a linha não está no mesmo formato que:

$ cat /etc/ssh/ssh_host_*.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEJJEs165NgdEcD94Xg3ySFA/qgkfytxNCX1X3pB2SPgU/mHLGXCXM8+VqMBXocM8OMOq2L0fDGr5mI+nGqjhNU= user@host

O formato aceito pelo arquivo known_hosts pode ser obtido usando (do servidor para obter a autenticidade das chaves):

$ ssh-keyscan 11.22.33.44
11.22.33.44 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEJJEs165NgdEcD94Xg3ySFA/qgkfytxNCX1X3pB2SPgU/mHLGXCXM8+VqMBXocM8OMOq2L0fDGr5mI+nGqjhNU=
#[...]

Imprime o formato que você pode armazenar diretamente no cliente known_hosts .

Para toda a imagem (da página de manual):

Each line in these files contains the following fields: markers (optional), hostnames, bits, exponent, modulus, comment. The fields are separated by spaces.

(embora pareça não consistente com o que é gerado: nome do host, tipo de chave, dados chave (base64)) - Vou verificar isso mais tarde, já que não é importante para a pergunta

    
por 17.01.2016 / 22:00