148 lines
4.0 KiB
Markdown
148 lines
4.0 KiB
Markdown
|
|
# 处理 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 密钥**(公钥/私钥对)
|
|||
|
|
- ✅ 这是正常的安全验证流程
|
|||
|
|
- ✅ 接受后,后续使用不会再提示
|
|||
|
|
|
|||
|
|
|