SSH 指纹与 Gitlab.com 不匹配

voi*_*ter 6 git ssh gitlab

我在 上向我的帐户添加了 ED25519 公钥gitlab.com。然后我将.ssh/config私钥设置为Host gitlab.com

Host gitlab.com gitlab.*.com
    User git
    IdentityFile ~/.ssh/gitlab_ed25519
Run Code Online (Sandbox Code Playgroud)

当我执行 a 时git fetch,我会看到密钥的指纹:

The authenticity of host 'gitlab.com (35.231.145.151)' can't be established.
ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Run Code Online (Sandbox Code Playgroud)

然后我尝试验证它是否与我的计算机上的公钥匹配:

$ ssh-keygen -lf ~/.ssh/gitlab_ed25519.pub
256 SHA256:Gc/kdTZNJJ0AkdRuZmXOnZw77mS2+osIHQd0pRwJxZA comment (ED25519)
Run Code Online (Sandbox Code Playgroud)

这些不匹配。即使我在 上添加了 Ed25519 密钥gitlab.com,他们的 SSH 服务器仍然报告 ECDSA 密钥的指纹,这重要吗?不是应该说指纹来自ED25519吗?我究竟做错了什么?为什么指纹不匹配?

bk2*_*204 9

当您运行 时,您将显示密钥ssh-keygen -lf的指纹。远程主机 GitLab 也有一个或多个与您的不同的密钥。您的密钥用于向远程服务器识别您的身份,而 GitLab 的密钥用于向您识别它(服务器),因此它们必然会有所不同。

如果您想验证指纹,可以访问https://gitlab.com/help/instance_configuration为您的 GitLab 查找指纹并验证它们是否正确。

您看到提供 ECDSA 密钥的原因是 OpenSSH 更喜欢 ECDSA 而不是 Ed25519 密钥。这并不是对安全性的评论,因为大多数人都认为 Ed25519 密钥与 256 位 ECDSA 密钥一样安全(或更高),并且更具有向后兼容性。当 OpenSSH 添加 Ed25519 密钥时,如果它们的优先级高于 ECDSA 密钥,则下次登录时会显示更改的主机密钥错误。

如果您想为 gitlab.com 选择 Ed25519 密钥,您可以将以下指令添加到您的条目中~/.ssh/config

HostKeyAlgorithms ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,rsa-sha2-512,rsa-sha2-256
Run Code Online (Sandbox Code Playgroud)