ECDSA 密钥指纹 - 看起来是 base64 编码,但字符太少

Ans*_*sss 6 git ssh-keys gitlab

我已经设置了一个GitLab VM,并在其上创建了一个项目。现在我正在尝试使用我的 git 客户端从另一台机器连接到它(Git for Windows v2.7.1 ...也尝试升级到最新版本 2.15.1,但没有变化)。

在 Windows 机器上,我尝试:

git push -u origin --all
The authenticity of host 'localgit.local (10.1.2.3)' can't be established.
ECDSA key fingerprint is SHA256:twmcV7LjBtI9vUsDeFEHeH0lUcBAihWtGye0K9vHCrk.
Are you sure you want to continue connecting (yes/no)? no
Run Code Online (Sandbox Code Playgroud)

我选择“否”是因为当我在虚拟机上仔细检查时,我发现了不同的指纹:

ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 7e:e4:4e:7f:47:b0:41:75:2c:45:bd:be:f5:44:77:d7 /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
Run Code Online (Sandbox Code Playgroud)

好的,它是十六进制格式,所以我将其转换为 base64,对吗?

hex: 7ee44e7f47b041752c45bdbef54477d7
base64: fuROf0ewQXUsRb2+9UR31w==
Run Code Online (Sandbox Code Playgroud)

好吧,这不匹配......如果我走另一条路并将该 base64 指纹转换为十六进制并看看它是什么样子怎么办?结果我不能,它是 43 个字符,并且 base64 字符串的长度必须是 4 的倍数。

关于我在这里缺少什么的任何想法?

wom*_*ble 1

用冒号分隔的八位字节格式是 MD5 指纹,而不是 SHA256 指纹。您无法直接将一个转换为另一个(好吧,如果您反转 MD5 指纹,也许可以,但这仍然需要一点 CPU 能力)。

输出ssh-keygenMD5 指纹表明该机器可能正在运行相当旧版本的 OpenSSH,因为现在的默认输出格式是 SHA256。您可以尝试传递-E sha256tossh-keygen让它输出 SHA256 哈希值,以防有一个版本支持 SHA256 但默认为 MD5,并且您碰巧正在运行它,但我不想说它肯定会工作。

如果您无法获得ssh-keygen输出 SHA256 的版本,另一个选项是“降级”SSH 客户端以在连接时输出 MD5 指纹。为此,您需要-o FingerprintHash=md5在命令行(或FingerprintHash md5SSH 配置中)进行设置。考虑到您是通过 git 运行 SSH,具体如何最好地做到这一点,留给精明的读者作为练习。<咧嘴笑>

侧边栏:base64 SHA256 哈希值不是“正确”的字符数的原因是 SHA256 哈希值不是“正确”的字符数,无法适应没有尾随符号的 Base64 字符串=。由于最后几个字符“始终”是=符号,因此它们会被丢弃,从而节省了一些无用的字符。