Files
gerrit/处理SSH主机密钥验证.md
2025-12-22 17:12:39 +08:00

4.0 KiB
Raw Permalink Blame History

处理 SSH 主机密钥验证问题

问题说明

当您看到以下提示时:

The authenticity of host '[101.43.95.130]:29419' can't be established.
ED25519 key fingerprint is SHA256:DH/rryTaDvEpfj6SmXgTJaZtULX1kksBF6DGOvDZjks.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

这是正常的 SSH 安全验证,不是错误!

原因

  • 您之前连接过 29418 端口SSH 已经保存了该端口的主机密钥
  • 现在使用 29419 端口SSH 将其视为新的主机(不同端口 = 不同主机)
  • SSH 需要您确认是否信任这个新主机

解决方案

方法 1直接接受推荐

在提示时直接输入 yes 并回车:

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

SSH 会自动将新主机密钥保存到 ~/.ssh/known_hosts 文件中。

方法 2预先添加主机密钥

如果您想提前添加,可以在 Git Bash 中执行:

# 先删除旧的 29418 端口记录(可选)
ssh-keygen -R [101.43.95.130]:29418

# 手动添加 29419 端口的主机密钥
ssh-keyscan -p 29419 101.43.95.130 >> ~/.ssh/known_hosts

方法 3更新 known_hosts 文件

手动编辑 known_hosts 文件:

# 在 Git Bash 中打开文件
notepad ~/.ssh/known_hosts

# 或者使用文本编辑器
# 找到包含 101.43.95.130:29418 的行,可以删除或保留
# SSH 会自动为 29419 端口创建新条目

重要说明

不需要重新配置 SSH 密钥

  • SSH 公钥/私钥对id_rsaid_rsa.pub不需要重新生成
  • 这些密钥已经配置好了,可以继续使用
  • 只需要接受新的主机密钥(服务器端的密钥)

两种密钥的区别

  1. SSH 密钥对(您的密钥):

    • 用于身份认证(证明您是您)
    • 已经添加到 Gerrit 中
    • 不需要重新配置
  2. 主机密钥(服务器的密钥):

    • 用于验证服务器身份(证明服务器是真正的服务器)
    • 每个端口都有独立的主机密钥
    • 第一次连接时需要接受

完整操作步骤

步骤 1接受主机密钥

在 Git Bash 中,当看到提示时输入 yes

$ git push origin HEAD:refs/for/master
The authenticity of host '[101.43.95.130]:29419' can't be established.
ED25519 key fingerprint is SHA256:DH/rryTaDvEpfj6SmXgTJaZtULX1kksBF6DGOvDZjks.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

步骤 2验证连接

接受后SSH 会保存主机密钥,然后继续推送。如果一切正常,您会看到推送成功的消息。

步骤 3后续使用

以后使用 29419 端口时,不会再提示,因为主机密钥已经保存。

验证指纹(可选但推荐)

为了安全,您可以验证指纹是否匹配:

  1. 在服务器上查看主机密钥指纹

    # 在服务器上执行
    ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
    
  2. 与提示中的指纹对比

    • 提示中的指纹:SHA256:DH/rryTaDvEpfj6SmXgTJaZtULX1kksBF6DGOvDZjks
    • 如果匹配,说明是真正的服务器,可以安全接受

常见问题

Q: 输入 yes 后还是失败?

A: 可能的原因:

  1. SSH 公钥未添加到 Gerrit → 检查 http://101.43.95.130:8080/#/settings/ssh-keys
  2. 用户名错误 → 确认 Git remote URL 中的用户名
  3. 项目不存在 → 确认项目名称是否正确

Q: 可以跳过主机密钥验证吗?

A: 不推荐!这会降低安全性。但如果是测试环境,可以临时设置:

# 在 ~/.ssh/config 中添加(不推荐生产环境)
Host 101.43.95.130
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Q: 如何查看已保存的主机密钥?

A:

# 查看 known_hosts 文件
cat ~/.ssh/known_hosts | grep 101.43.95.130

总结

  • 直接输入 yes 接受主机密钥即可
  • 不需要重新配置 SSH 密钥(公钥/私钥对)
  • 这是正常的安全验证流程
  • 接受后,后续使用不会再提示