You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab SSH密钥指纹不匹配:Server B用ECDSA需输密码的解决方法

解决GitLab Server B SSH密钥认证失败(要求输入密码)的问题

我通过ssh-keygen创建了ed25519类型的SSH公钥和私钥,并将公钥添加到两个GitLab实例的个人资料中。克隆仓库时,连接Server A的GitLab可正常工作,但连接Server B时却被要求输入密码。

测试信息

Server A测试结果

ssh -T git@server-a
Welcome to GitLab, @user!

Server B测试结果

ssh -T git@server-b
The authenticity of host 'server-b' can't be established.
ECDSA key fingerprint is SHA256:K0vuxkNHqP9Qp3j7rkQMppgCQtFaZjXQTwGp4ccIsrY.

Server A SSH调试信息(主机密钥用ssh-ed25519)

debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ssh-ed25519
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug3: send packet: type 30
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug3: receive packet: type 31
debug1: Server host key: ssh-ed25519 SHA256:ebtDdgkJ5OBH1lBxhPA59xPMSVRcZMPOxe3tnYvPGE0

Server B SSH调试信息(主机密钥用ecdsa-sha2-nistp256)

debug1: kex: algorithm: ecdh-sha2-nistp256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: aes128-ctr MAC: hmac-sha2-256-etm@openssh.com compression: none
debug1: kex: client->server cipher: aes128-ctr MAC: hmac-sha2-256-etm@openssh.com compression: none
debug3: send packet: type 30
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug3: receive packet: type 31
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:K0vuxkNHqP9Qp3j7rkQMppgCQtFaZjXQTwGp4ccIsrY

本地公钥信息

ssh-keygen -lf .ssh/id_ed25519.pub
256 SHA256:eFKEYbjf8Frjp96UzXwWMfOJHXTe/TEEwTkneKkN/8Y  (ED25519)

解决步骤

1. 信任Server B的主机密钥

首次连接Server B时,主机密钥未被本地信任,可能导致SSH fallback到密码认证。执行以下命令手动添加信任:

ssh-keyscan -H server-b >> ~/.ssh/known_hosts

或在首次连接提示时输入yes确认,完成主机密钥信任。

2. 强制SSH使用ED25519密钥连接Server B

编辑本地~/.ssh/config文件(无则创建),添加专属配置:

Host server-b
  HostName server-b
  User git
  IdentityFile ~/.ssh/id_ed25519
  PreferredAuthentications publickey

该配置会强制SSH连接Server B时优先使用指定的ED25519密钥,跳过其他认证方式。

3. 检查Server B的GitLab公钥配置

登录Server B的GitLab个人页面,进入设置 > SSH密钥:

  • 确认已添加的公钥内容与本地~/.ssh/id_ed25519.pub完全一致,无多余空格或换行
  • 若存在旧密钥,删除后重新粘贴本地公钥内容

4. 验证Server B的GitLab是否支持ED25519密钥

若有Server B的GitLab管理员权限,进入管理区域 > 设置 > 网络 > SSH设置:

  • 确认启用的SSH密钥类型中包含ed25519(部分旧版本GitLab可能默认禁用,需手动开启)
  • 若版本过旧,建议升级GitLab至支持ED25519的版本

5. 调试认证细节定位问题

执行更详细的SSH调试命令,查看认证失败的具体原因:

ssh -vvvT git@server-b

重点关注输出中Authentication相关段落,排查是否存在密钥被拒绝、权限错误等问题。

6. (可选)为Server B启用ED25519主机密钥

若有Server B的服务器权限,可生成并启用ED25519主机密钥:

# 生成ED25519主机密钥
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
# 重启SSH服务
systemctl restart sshd

内容的提问来源于stack exchange,提问作者StandardNerd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:45:35