Tenha cuidado para distinguir entre blobs e hashes. A chave pública blob usada pelo OpenSSH, e também pelo PuTTY, é a mesma para uma determinada chave, independentemente do (s) hash (s) usado (s). O blob chave é armazenado em base64 pelo OpenSSH em seus arquivos xxx_key.pub known_hosts authorized_keys
, conforme aplicável, em parte porque facilita copiar esses arquivos e valores com técnicas como recortar e colar e (especialmente mais antigas) e-mail que talvez não manipule dados "binários", conhecidos como "8 bits". A "impressão digital" exibida pelo OpenSSH (por padrão, a menos que você peça VisualHostKey
) costumava ser MD5 (blob) exibido em hexadecimal, e agora é SHA256 (blob) exibido em base64. O PuTTY seguiu o exemplo original do OpenSSH, mas (a partir de 0.67) não é a atualização.
Você pode solicitar um acessório seguindo as instruções do manual e duplicados em link . Ou é open source; você mesmo pode fazer a alteração e enviá-la de volta para ela (veja B.5 logo após B.4). O código de 'impressão digital' está atualmente em um lugar em sshdsa.c
e dois em sshrsa.c
, mas eu ver no site a próxima versão vai incluir ecdsa e ed25519 chaves, o que significa que, presumivelmente, pelo menos um e talvez vários novos lugar (es ) para criar uma impressão digital. Para ser consistente, permita a base64 de um hash (não apenas de um blob como agora) em validate_manual_key
in misc.c
. Isso é fácil se você mudar para SHA256-b64 incondicionalmente e nunca fazer MD5-hex; para uma apresentação ou recurso utilizável por outras pessoas, isso provavelmente tem que ser configurável e / ou interativo, o que parece ser um pouco mais difícil.
Para o Windows, consigo ver uma muito solução alternativa desajeitada. Use plink
para se conectar ao host e aceitar a nova chave, colocando-a no registro. (Se houver uma chave antiga, salve-a primeiro.) Obtenha a nova chave do registro (em partes), construa o blob, o hash e a base64 e exiba-a para confirmação. Se não confirmado, apague a chave do registro (e restaure qualquer anterior).
Para Unix, uma forma um pouco menos desajeitado é usar ssh
com StrictHostKeyChecking=no
a aceitar a nova chave e colocar o blob base64 em known_hosts
, ou usar ssh-keyscan
para obter o blob base64 diretamente. Então base64-decode, hash, base64-codifica (o hash) e exibe; se for ruim depois que ssh
for forçado, exclua a entrada incorreta de known_hosts
; se bom depois de ssh-keyscan
, adicione a boa entrada. O OpenSSL pode fazer convenientemente os dois bits do cálculo:
awk <.ssh/known_hosts '$1~/thehostname/{print $3}' |openssl base64 -d |openssl sha256 |openssl base64
mas se você não tem o OpenSSL, deve ser fácil combinar outras ferramentas base64 e sha256.