--- 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)