我正在尝试通过 SSH 连接到我的服务器,客户端正在询问主机的真实性。
ECDSA key fingerprint is SHA256:bla bla bla
在我使用过的每个版本的 OpenSSH 中,ECDSA(或 RSA)密钥都显示如下内容
a7:3h:75:5d:si:9v:3g...
在 Ubuntu 16.04 上,它们显示如下
c2ymd4uGIG3y34R78BcrykBVT...
我有另一种方式访问服务器,我正在尝试通过运行来验证指纹ssh-keygen -lf ssh_host_ecdsa_key.pub
。但这会输出类似的东西2048 a7:3h:75:5d:si:9v:3g...
。即使忽略冒号,它们也不匹配。我不能 100% 肯定这不是由于 MITM 攻击造成的,但可能性极小。
我如何验证密钥签名?我找到的所有解决方案似乎都涉及不同版本ssh-keygen
,但我不知道我拥有哪个版本,或者其他人拥有哪个版本。
答案1
您可以ssh -o FingerprintHash=md5 user@host
使用老式的 MD5 哈希值,或者将其存储在您的~/.ssh/config
:
FingerprintHash md5
您的服务器可能正在使用旧的 openssh 版本,不支持新的 sha256 哈希值。
答案2
虽然接受的答案解决了强制较新的客户端显示 MD5 哈希的问题,但它并没有具体解决在服务器上计算指纹时强制服务器使用特定哈希函数显示其指纹的问题。为了澄清这一点,在检查指纹时,您需要将客户端上显示的指纹与服务器上的真实值进行匹配。@Jakuje 的答案涉及让客户端使用不同的哈希函数,这个答案涉及让服务器使用不同的哈希函数向您显示哈希。无论您更改服务器还是客户端的哈希函数都没有关系,只要它们相同即可。
要查找主机的指纹,请在该主机上执行:
# Works with the version of OpenSSH on 16.04 but not 14.04
# (on 14.04 I have OpenSSH_6.6.1p1; on 16.04 it's OpenSSH_7.2p2)
# Check your version with with `ssh -V`
cd /etc/ssh
ssh-keygen -l -E md5 -f ssh_host_ecdsa_key.pub
当然,您可以更改md5
为任何受支持的哈希函数,并且您可能需要ssh_host_ecdsa_key.pub
根据您使用的密钥类型进行更改(例如ssh_host_rsa_key.pub
)。