Verifique a impressão digital da chave ECDSA enviada pelo host remoto [fechado]

24

Eu recebi a mensagem de aviso conhecida ao tentar ssh em um servidor:

$ ssh whateverhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/user/.ssh/known_hosts:10
ECDSA host key for ipofmyhost has changed and you have requested strict checking.
Host key verification failed.

E eu sei porque, porque mudei o ip desse servidor. Mas se não fosse assim, como eu poderia verificar a impressão digital da chave ECDSA enviada pelo host remoto?

Eu tentei fazê-lo por:

echo -n ipofthehost | sha256sum

Mas não tenho a mesma impressão digital. Eu também tentei "hostname, ip" como no aws, mas não consegui correspondência.

Se eu excluir a entrada do meu arquivo known_hosts e tentar ssh novamente, ela será bem-sucedida e informará o seguinte:

ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Are you sure you want to continue connecting (yes/no)? 

Então, o que é aplicar o sha256sum para obter a impressão digital e como eu poderia verificá-la?

gugol
fonte
2
Sem um bom valor conhecido, você não pode verificá-lo. Você anotá-lo somente na primeira vez em que inicia o SSHd e as chaves são geradas e verifica o valor válido conhecido.
Eu editei sua pergunta. Este site aceita apenas perguntas sobre um ambiente profissional de negócios. Perguntas sobre redes domésticas são offtopic aqui, tentei salvar sua pergunta com minha edição. Atualmente, há uma votação contra sua pergunta para encerrar essa questão.
peterh diz restabelecer Monica
@ user186340 Parece ser verdade que "você apenas escreve na primeira vez que inicia o SSHd". Se você tiver acesso à máquina executando SSHd, poderá /etc/ssh/ssh_host_ecdsa_key.pubobter a impressão digital. Eu apenas fiz.
jamadagni 25/05

Respostas:

12

Uma impressão digital de chave pública não é o hash simples de uma string IP.

Para recuperar uma chave pública de host remoto, você ssh-keyscan <IP>pode usar as ferramentas usuais para extrair sua impressão digital ( ssh-keygen -lf <public_key_file>).

Finalmente, você pode comparar com a impressão digital atual em seu known_hostsarquivo com ssh-keygen -l -F <domain_or_ip>.

Xavier Lucas
fonte
2
Estou confuso por que, ao conectar via SSH e forçar uma tecla ecdsa pela primeira vez ( ssh -oHostKeyAlgorithms='ecdsa-sha2-nistp256' [email protected]), obtemos uma impressão digital alfanumérica de 43 dígitos ( ECDSA key fingerprint is SHA256:sBKcTiQ5V.... etc.), mas quando corro ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pubrecebo 32 caracteres hexadecimais?
precisa
1
@WilliamTurrell Isso está ocorrendo porque o servidor deve ter uma versão mais antiga (provavelmente pré-openSSH 6.8) da ssh-keygen(ou o seu provedor de servidores não acompanhou os tempos e ainda fornece apenas hashes MD5 em vez do novo SHA256). Existem soluções alternativas listadas aqui: superuser.com/questions/929566
SeldomNeedy
9

Um pouco mais detalhadamente : como a mensagem de aviso se refere à impressão digital da chave ECDSA enviada pelo host remoto, reunimos as informações sobre a chave pública (ecdsa) do host:

ssh-keyscan -t ecdsa ip_or_hostmane > ecdsa_file_to_compare

Em seguida, podemos descobrir onde, em nosso arquivo known_hosts, está a chave pública (ecdsa):

ssh-keygen -l -F ipofhost

Se quisermos comparar as impressões digitais, temos que colocar o conteúdo do nosso arquivo known_hosts (apenas a entrada relacionada a esse host), podemos chamá-lo de ecdsa_file_from_known_hosts e compará-los da seguinte forma:

ssh-keygen -lf ecdsa_file_to_compare
ssh-keygen -lf ecdsa_file_from_known_hosts

E verifique se o programa mostra o mesmo hash.

É claro que eles não correspondem, é por isso que recebi a mensagem de aviso (o ssh verifica essa correspondência internamente). Se tivermos certeza da mudança de ip (para que não soframos um ataque do tipo intermediário), podemos excluir a entrada desse host em nosso arquivo known_hosts e, da próxima vez que inserirmos uma nova entrada para será adicionado a esse arquivo.

gugol
fonte