first commit
This commit is contained in:
147
处理SSH主机密钥验证.md
Normal file
147
处理SSH主机密钥验证.md
Normal file
@@ -0,0 +1,147 @@
|
||||
# 处理 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 密钥**(公钥/私钥对)
|
||||
- ✅ 这是正常的安全验证流程
|
||||
- ✅ 接受后,后续使用不会再提示
|
||||
|
||||
|
||||
Reference in New Issue
Block a user