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

148 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 处理 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` 并回车:
```bash
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
```
SSH 会自动将新主机密钥保存到 `~/.ssh/known_hosts` 文件中。
### 方法 2预先添加主机密钥
如果您想提前添加,可以在 Git Bash 中执行:
```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` 文件:
```bash
# 在 Git Bash 中打开文件
notepad ~/.ssh/known_hosts
# 或者使用文本编辑器
# 找到包含 101.43.95.130:29418 的行,可以删除或保留
# SSH 会自动为 29419 端口创建新条目
```
## 重要说明
### ✅ 不需要重新配置 SSH 密钥
- **SSH 公钥/私钥对**`id_rsa``id_rsa.pub`**不需要重新生成**
- 这些密钥已经配置好了,可以继续使用
- 只需要接受新的**主机密钥**(服务器端的密钥)
### 两种密钥的区别
1. **SSH 密钥对**(您的密钥):
- 用于身份认证(证明您是您)
- 已经添加到 Gerrit 中
- 不需要重新配置
2. **主机密钥**(服务器的密钥):
- 用于验证服务器身份(证明服务器是真正的服务器)
- 每个端口都有独立的主机密钥
- 第一次连接时需要接受
## 完整操作步骤
### 步骤 1接受主机密钥
在 Git Bash 中,当看到提示时输入 `yes`
```bash
$ 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. **在服务器上查看主机密钥指纹**
```bash
# 在服务器上执行
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:** 不推荐!这会降低安全性。但如果是测试环境,可以临时设置:
```bash
# 在 ~/.ssh/config 中添加(不推荐生产环境)
Host 101.43.95.130
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
```
### Q: 如何查看已保存的主机密钥?
**A:**
```bash
# 查看 known_hosts 文件
cat ~/.ssh/known_hosts | grep 101.43.95.130
```
## 总结
- ✅ **直接输入 `yes` 接受主机密钥**即可
-**不需要重新配置 SSH 密钥**(公钥/私钥对)
- ✅ 这是正常的安全验证流程
- ✅ 接受后,后续使用不会再提示