Docker 安装 Gitea SSH 容器直通问题与解决

环境

系统:Debian 12.9
面板:1panel 1.10.24-lts
容器:commitgo/gitea-ee:23.0.0

配置ssh直通 步骤

1. 准备工作:创建 git 用户并确认 UID/GID

  • 创建 git 用户(如果尚未创建):
sudo adduser --system --shell /bin/bash --group --disabled-password git
  • 确认 git 用户的 UID/GID:
id git

记录输出中的 uid=1001(git) gid=1001(git)(示例值,实际可能不同)。

2. 修改 Docker Compose 配置

通过 1panel 面板或直接编辑 docker-compose.yml,确保以下配置:

services:
  gitea:
    image: gitea/gitea:latest
    environment:
      - USER_UID=1001  # 替换为 git 用户的 UID
      - USER_GID=1001  # 替换为 git 用户的 GID
      - SSH_DOMAIN=your-domain.com  # 你的域名(可选)
    volumes:
      - /home/git/.ssh/:/data/git/.ssh  # 挂载 SSH 目录
    ports:
      - "127.0.0.1:222:22"  # 将容器 SSH 端口 22 映射到主机的 222(仅限本地访问)
      # 其他端口(如 Web 端口)保持不变
    # 其他配置...
  • 关键点:

确保 USER_UID 和 USER_GID 与主机 git 用户一致。
SSH 端口映射必须绑定到 127.0.0.1:222(而非 0.0.0.0:222)。
挂载 /home/git/.ssh 到容器内 /data/git/.ssh。

3. 生成主机 SSH 密钥对

以 git 用户身份生成密钥:

sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"
  • 按提示将密钥保存到默认路径 /home/git/.ssh/id_rsa。
  • 不要设置密码(直接回车两次)。

4. 配置主机的 authorized_keys

  • 将主机公钥添加到 authorized_keys:
sudo -u git cat /home/git/.ssh/id_rsa.pub | sudo -u git tee -a /home/git/.ssh/authorized_keys
  • 验证文件格式:
sudo -u git cat /home/git/.ssh/authorized_keys

文件应开头是 ssh-rsa ,后续行是由 Gitea 自动添加的用户公钥(带 command=... 前缀)。

5. 创建 SSH 转发脚本

  • 创建文件 /usr/local/bin/gitea:
sudo nano /usr/local/bin/gitea
  • 写入内容:
#!/bin/sh
ssh -p 222 -o StrictHostKeyChecking=no [email protected] "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
  • 设置可执行权限:
sudo chmod +x /usr/local/bin/gitea

6. 重启 Gitea 容器

通过 1panel 面板重启 Gitea 容器。

7. 验证 SSH 直通

8. 关键注意事项

  • 确保 /home/git/.ssh 权限为 700:
sudo chmod 700 /home/git/.ssh
  • authorized_keys 权限应为 600:
sudo chmod 600 /home/git/.ssh/authorized_keys
  • 在 Gitea 的 app.ini 中确认以下设置:
[server]
SSH_PORT = 22  # 容器内端口
  • 确保主机的防火墙允许外部访问 SSH(22 端口),但容器的 222 端口无需对外开放。

按照以上步骤操作后,Gitea 的 SSH 功能将通过主机 22 端口转发到容器的 222 端口,避免端口冲突,同时保持用户体验一致。

按照以上步骤做完之后如果没有解决问题,看看是否是以下原因导致。

  • 使用cloudflare托管域名,并开启dns代理(小黄云)。

注意:如果你是cloudflare免费用户,dns代理只会代理http/https,22端口会失效。关闭dns代理即可。

标签: Gitea

添加新评论