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
相关产品推荐
相关产品推荐

