找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 55|回复: 0

git clone ssh协议慢的解决方案

[复制链接]

129

主题

1

回帖

735

积分

管理员

积分
735
发表于 2025-8-19 15:47:07 | 显示全部楼层 |阅读模式
## Git Clone SSH 协议慢的问题解决方案

### 问题描述
当本地配置了 HTTP 代理(监听端口 7890)后,使用 `git clone [email protected]:...` (SSH协议) 克隆仓库速度很慢,但使用 `git clone https://github.com/...` (HTTPS协议) 速度正常。

### 问题原因
- HTTP/HTTPS 代理配置(`export http_proxy` 和 `git config --global http.proxy`)只对 HTTP/HTTPS 协议生效
- SSH 协议(使用 `git@` 开头的地址)默认不走 HTTP 代理,直接连接 GitHub 的 22 端口
- 在某些网络环境下,SSH 直连可能受到限制或速度较慢

### 解决方案

#### 步骤 1:安装 netcat
```bash
sudo apt update
sudo apt install netcat
```

#### 步骤 2:配置 SSH 代理
编辑 SSH 配置文件:
```bash
nano ~/.ssh/config
```

如果文件不存在,会自动创建。添加以下内容:
```bash
Host github.com
    ProxyCommand nc -X connect -x 127.0.0.1:7890 %h %p
```

**配置说明:**
- `Host github.com`:仅对 github.com 使用此代理设置
- `ProxyCommand`:指定 SSH 连接时使用的代理命令
- `nc -X connect`:使用 netcat 的 HTTP CONNECT 模式
- `-x 127.0.0.1:7890`:指定代理服务器地址和端口
- `%h %p`:SSH 会自动替换为目标主机名和端口

#### 步骤 3:设置文件权限
```bash
chmod 600 ~/.ssh/config
```

#### 步骤 4:验证配置
测试 SSH 连接是否正常:
```bash
ssh -T [email protected]
```

成功时会显示:
```
Hi [你的用户名]! You've successfully authenticated, but GitHub does not provide shell access.
```

### 其他注意事项

1. **代理类型确认**:
   - 如果你的代理是 SOCKS5 代理,将配置改为:
     ```bash
     ProxyCommand nc -X 5 -x 127.0.0.1:7890 %h %p
     ```

2. **适用范围**:
   - 这个配置只影响 github.com 的 SSH 连接
   - 如需对其他 Git 服务(如 GitLab、Gitee)配置代理,添加相应的 Host 配置块

3. **已有仓库的处理**:
   - 配置生效后,已克隆的仓库无需重新克隆
   - 后续的 `git pull`、`git push` 等操作都会自动使用代理

### 故障排查

如果配置后仍有问题:

1. **检查代理是否正常运行**:
   ```bash
   curl -x http://127.0.0.1:7890 https://www.google.com
   ```

2. **查看详细的 SSH 连接过程**:
   ```bash
   ssh -vT [email protected]
   ```

3. **确认 netcat 版本**:
   某些系统可能需要指定使用 OpenBSD 版本的 netcat:
   ```bash
   sudo apt install netcat-openbsd
   ```
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|jiakai的Discuz! X

GMT+8, 2025-9-16 14:28 , Processed in 0.039849 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表