---
title: Gitea + SSH 完整配置指南（含排错）
source:
author: shenwei
published:
created:
description:
tags: [git, gitea, obsidian, ssh]
---

# Gitea + SSH 完整配置指南（含排错）

#git #gitea #ssh #obsidian 

```table-of-contents
```
## 一、整体目标

实现：
- 使用 Gitea 作为 Git 服务器
- 使用 SSH Key 替代 username/password
- 在 Visual Studio Code 中无感使用 Git
- 避免 HTTP + Proxy 带来的问题

---

# 二、Gitea 部署与 SSH 配置

## 1. Docker 部署（推荐标准配置）

```yaml
version: "3"

services:
  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    restart: always
    ports:
      - "3000:3000"   # Web UI
      - "2222:22"     # SSH（关键）
    volumes:
      - ./gitea:/data
```

---

## 2. 为什么要用 2222

- 宿主机 22 端口通常已被系统 SSH 占用
- 使用 `2222 → 22` 映射避免冲突

---
## 3. 启用 Gitea SSH 服务

进入容器：

```bash
docker exec -it gitea /bin/sh
```

检查配置：

```bash
cat /data/gitea/conf/app.ini
```

确保：

```ini
[server]
START_SSH_SERVER = true
SSH_PORT = 22
```

---
## 4. 重启服务

```bash
docker compose down
docker compose up -d
```

---

# 三、客户端 SSH Key 配置

## 1. 生成 SSH Key

```bash
ssh-keygen -t ed25519 -C "ishenwei@gmail.com"
```

默认路径：

```bash
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub
```

---
## 2. 启动 SSH Agent

```bash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
```

---

## 3. 添加公钥到 Gitea

```bash
cat ~/.ssh/id_ed25519.pub
```

复制内容 → 登录 Gitea：

- Settings
- SSH Keys
- Add Key

---

# 四、SSH 连接测试（关键步骤）

## 正确命令

```bash
ssh -T git@192.168.3.189 -p 2222
```

```
ssh -T git@gitea.ishenwei.online -p 12222
```
---
## 返回结果解析

### ✅ 成功

```bash
Hi username! You've successfully authenticated...
```

👉 可以开始使用 Git

---

### ❌ Connection refused

```bash
connect to host ... port 2222: Connection refused
```

👉 原因：

- Docker 没映射端口

✔ 修复：

```yaml
- "2222:22"
```
---

### ❌ Connection closed

```bash
Connection closed by ... port 2222
```
👉 原因：

- SSH 服务存在，但不是 Gitea 在处理
- 或 Gitea SSH 未启用

---

### ❌ Permission denied (publickey)

```bash
Permission denied (publickey)
```

👉 原因：

- SSH key 未加载或未添加

✔ 修复：

```bash
ssh-add ~/.ssh/id_ed25519
```

---

### ❌ 错误写法（常见坑）

```bash
ssh -T git@192.168.3.189:3000   ❌
```

👉 错误原因：

- SSH 不支持 `IP:PORT` 写法
---
# 五、Git 仓库改为 SSH

## 1. 查看当前 remote

```bash
git remote -v
```

你当前是：

```bash
http://192.168.3.189:3000/admin/nexus.git   ❌
```

## 2. 修改为 SSH

```bash
git remote set-url origin ssh://git@192.168.3.189:2222/admin/nexus.git
```
## 3. 验证

```bash
git pull
```
## 4. 查看配置

```bash
git config --list
```

---
# 六、VS Code 使用说明

在 Visual Studio Code 中：

- 无需额外配置
- 只要 Git + SSH 正常即可

👉 优势：
- 不再输入密码
- 不受 proxy 影响
- clone / pull 不会卡住

---
# 七、进阶优化（强烈推荐）

## 1. SSH Host 别名

编辑：

```bash
~/.ssh/config
```

```bash
Host macmini
  HostName 192.168.3.189
  Port 2222
  User git
  IdentityFile ~/.ssh/id_ed25519
```
## 2. 使用简化地址

```bash
git clone ssh://git@192.168.3.45:2222/admin/nexus.git
```

---
# 八、你这次问题的根因总结

## 实际问题链路

```text
HTTP Git + Proxy → 卡住
        ↓
尝试 SSH（但用错端口）
        ↓
未映射 Docker SSH 端口
        ↓
连接到了错误的 SSH 服务
```

---
## 正确架构

```text
VS Code
   ↓
Git (SSH)
   ↓
Gitea (Docker)
   ↓
SSH Port 2222 → Container 22
```

---
# 九、最佳实践总结

- 使用 SSH 替代 HTTP + Password
- Docker 映射 SSH 端口（2222）
- 使用 ed25519 key
- 使用 SSH config 做多环境管理
- 避免代理干扰 Git
---

# 十、一句话结论

👉 **Git 的本质是：**
- user.name / email → 标识身份
- SSH Key → 认证身份

👉 **最稳定方案：**
> Gitea + SSH（2222）+ VS Code = 无痛开发环境



这是一个关于从 Windows 客户端通过 SSH 连接 Mac mini 上 Gitea 仓库的排错笔记。你可以将其保存为 Markdown 文件（如 `Gitea_SSH_Troubleshooting.md`）以便日后查阅。

---

# 📝 Git 排错笔记：解决 Gitea SSH 连接断开与权限问题

## 1. 问题现象

在 Windows 终端执行 `git clone` 或 `git pull` 时，出现以下错误：

- **现象 A:** `Connection closed by 192.168.3.189 port 22` 或 `fatal: Could not read from remote repository`.
    
- **现象 B:** `ishen@192.168.3.189: Permission denied (publickey)`.
    

---

## 2. 核心原因分析

经过排查，导致问题的根源有三点：

1. **端口冲突**：默认 SSH 使用 22 端口（指向 macOS 系统 SSH），而 Gitea 运行在 **2222 端口**。
    
2. **用户混淆**：Git 默认尝试使用 Windows 当前用户名（`ishen`），但 Gitea 的 SSH 验证强制要求使用 **`git`** 用户。
    
3. **协议格式**：在非标准端口（非 22）下，必须使用特定的 `ssh://` 前缀格式。
    

---

## 3. 修复步骤

### 第一步：验证 SSH 连通性

首先确认公钥是否已在 Gitea 中生效，并指定正确端口：

Bash

```
ssh -vT git@192.168.3.189 -p 2222
```

- **预期输出**：`Hi there, admin! You've successfully authenticated... but Gitea does not provide shell access.`
    
- **结论**：只要看到这段话，说明密钥（Key）和端口（Port）是通的。
    

### 第二步：修正远程仓库地址 (Remote URL)

如果已经克隆了仓库但无法 Pull/Push，需要更新 `origin` 的地址：

Bash

```
# 切换到项目目录
cd D:\Workspace\nexus

# 重新设置远程地址，强制指定 git 用户和 2222 端口
git remote set-url origin ssh://git@192.168.3.189:2222/admin/nexus.git
```

### 第三步：验证修改

查看当前的远程配置是否正确：

Bash

```
git remote -v
```

- **正确结果应包含**：`ssh://git@192.168.3.189:2222/...`
    

---

## 4. 终极解决方案：配置 SSH Config (推荐)

为了避免每次都要手动输入端口和用户，在 Windows 本地创建或修改 `C:\Users\ishen\.ssh\config` 文件：

Plaintext

```
# Mac mini Gitea 配置
Host 192.168.3.189
    HostName 192.168.3.189
    User git
    Port 2222
    IdentityFile ~/.ssh/id_rsa
```

**配置后的效果：**

以后只需执行简单的命令，Git 会自动映射 `git` 用户和 `2222` 端口：

- `git clone ssh://git@192.168.3.45:2222/admin/nexus.git`
    
- `git pull`
    

---

## 5. 总结备忘

- **不要使用系统用户名**：无论你的 Gitea 账户叫什么，SSH 连接用户名统一用 `git`。
    
- **非标端口必须加协议**：如果端口不是 22，地址必须写成 `ssh://git@host:port/repo.git`。
    
- **优先检查端口**：Mac 系统的 SSH (22) 和 Gitea 的 SSH (通常是 2222 或 10022) 是两码事。
    

---

**记录时间**：2026-03-25

**设备环境**：Windows ThinkBook -> Mac mini (192.168.3.189)