Docker 安装 Gitea SSH 容器直通问题与解决
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
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代理即可。