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?
ssh
fingerprint
gugol
fonte
fonte
/etc/ssh/ssh_host_ecdsa_key.pub
obter a impressão digital. Eu apenas fiz.Respostas:
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_hosts
arquivo comssh-keygen -l -F <domain_or_ip>
.fonte
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 corrossh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
recebo 32 caracteres hexadecimais?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/929566Um 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:
Em seguida, podemos descobrir onde, em nosso arquivo known_hosts, está a chave pública (ecdsa):
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:
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.
fonte