96 lines
2.1 KiB
Markdown
96 lines
2.1 KiB
Markdown
|
|
# Gerrit HTTP 推送认证问题 - 最终解决方案
|
|||
|
|
|
|||
|
|
## 问题根源
|
|||
|
|
|
|||
|
|
`DEVELOPMENT_BECOME_ANY_ACCOUNT` 模式默认不支持 HTTP Basic 认证进行 Git 操作。我已经在服务器端添加了 `gitBasicAuth = true` 配置。
|
|||
|
|
|
|||
|
|
## 解决方案
|
|||
|
|
|
|||
|
|
### 步骤 1:等待服务器重启完成
|
|||
|
|
|
|||
|
|
服务器正在重启,请等待 10-15 秒。
|
|||
|
|
|
|||
|
|
### 步骤 2:重新尝试推送
|
|||
|
|
|
|||
|
|
在您的本地电脑上执行:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /d/ttt/test-project
|
|||
|
|
|
|||
|
|
# 确保远程 URL 包含用户名
|
|||
|
|
git remote set-url origin http://renjianbo@101.43.95.130:8080/test-project
|
|||
|
|
|
|||
|
|
# 清除已保存的凭证(如果有)
|
|||
|
|
git credential reject <<EOF
|
|||
|
|
protocol=http
|
|||
|
|
host=101.43.95.130
|
|||
|
|
port=8080
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
# 重新推送
|
|||
|
|
git push origin HEAD:refs/for/master
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
当提示输入密码时,直接按回车(留空)。
|
|||
|
|
|
|||
|
|
### 步骤 3:如果还是不行,使用 SSH(推荐)
|
|||
|
|
|
|||
|
|
由于 HTTP 认证在开发模式下可能有限制,强烈建议使用 SSH:
|
|||
|
|
|
|||
|
|
#### 1. 确保 SSH 公钥已添加到 Gerrit
|
|||
|
|
|
|||
|
|
访问:`http://101.43.95.130:8080/#/settings/ssh-keys`
|
|||
|
|
|
|||
|
|
确保您的公钥已添加。
|
|||
|
|
|
|||
|
|
#### 2. 修复防火墙(服务器端)
|
|||
|
|
|
|||
|
|
如果您有服务器管理员权限,执行:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
sudo firewall-cmd --permanent --add-port=29418/tcp
|
|||
|
|
sudo firewall-cmd --reload
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
如果是云服务器,还需要在云控制台的安全组中开放 29418 端口。
|
|||
|
|
|
|||
|
|
#### 3. 使用 SSH 推送
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /d/ttt/test-project
|
|||
|
|
|
|||
|
|
# 删除 HTTP 远程仓库
|
|||
|
|
git remote remove origin
|
|||
|
|
|
|||
|
|
# 添加 SSH 远程仓库
|
|||
|
|
git remote add origin ssh://renjianbo@101.43.95.130:29418/test-project
|
|||
|
|
|
|||
|
|
# 推送
|
|||
|
|
git push origin HEAD:refs/for/master
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 当前服务器配置
|
|||
|
|
|
|||
|
|
```ini
|
|||
|
|
[auth]
|
|||
|
|
type = DEVELOPMENT_BECOME_ANY_ACCOUNT
|
|||
|
|
gitBasicAuth = true
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
`gitBasicAuth = true` 应该允许 HTTP Basic 认证用于 Git 操作。
|
|||
|
|
|
|||
|
|
## 推荐方案
|
|||
|
|
|
|||
|
|
**强烈推荐使用 SSH 方式**,因为:
|
|||
|
|
- ✅ 更安全
|
|||
|
|
- ✅ 更可靠
|
|||
|
|
- ✅ 不受 HTTP 认证限制
|
|||
|
|
|
|||
|
|
如果 SSH 连接有问题,主要是防火墙问题,修复后就可以正常使用。
|
|||
|
|
|
|||
|
|
## 下一步
|
|||
|
|
|
|||
|
|
1. **等待服务器重启完成**(约 10-15 秒)
|
|||
|
|
2. **重新尝试 HTTP 推送**
|
|||
|
|
3. **如果还是不行,修复防火墙后使用 SSH**
|