配置容器中的 Gitea SSH 与主机 SSH 共存
Zapic
2026-04-30 0

默认情况下,想要启用Gitea的SSH代码拉取,必须要修改SSH端口或者禁用主机上的SSH。若想要直接使用宿主机上的SSHD,需要进行一些配置。

Method A: 通过SSH透传

建议使用

  1. 在宿主机上创建git用户
  2. 切换到新用户,使用id命令确定git用户的UID和GID,并将容器中运行的Gitea设置为相同的UID和GID(通过容器的USER_UIDUSER_GID环境变量)
  3. 将容器的SSH映射到主机上,检查端口是否可以正常访问,例如映射到2222端口: ssh [email protected] -p2222,应当得到鉴权失败之类的信息,而不是等待许久之后报错无法连接
  4. 使用git用户创建一对SSH密钥用于连接到Gitea:ssh-keygen
  5. 将公钥写回到authorized_keyscat ~/.ssh/id_*.pub >> ~/.ssh/authorized_keys
  6. /home/git/.ssh 映射到容器中Gitea写入.ssh的位置,一般是/home/git/.ssh,可以通过Gitea app.ini的SSH_ROOT_PATH配置(配置此项请参考Gitea文档的Config Cheatsheet)。
  7. 尝试在Gitea中添加一些密钥,检查宿主机目录中的/home/git/.ssh/authorized_keys中是否有内容,如果没有内容,则需要在Gitea后台中的“计划任务”页面手动执行“更新.ssh/authorized_keys”任务。然后找到要执行的命令是什么,即command=后的内容,一般是/usr/local/bin/gitea ...
  8. 在宿主机上同样的位置创建一个转发用的脚本并赋予执行权限,将SSH命令转发到容器中。

    #!/bin/bash
    ssh -p 2222 -o StrictHostKeyChecking=no [email protected] "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
  9. 尝试拉取代码

Method B: 通过容器命令透传

  1. 在宿主机上创建git用户
  2. 切换到新用户,使用id命令确定git用户的UID和GID,并将容器中运行的Gitea设置为相同的UID和GID(通过容器的USER_UIDUSER_GID环境变量)
  3. 允许新用户访问docker: usermod -G docker,针对k8s,请为其创建一份有效的kubeconfig,使其可以访问容器并执行命令
  4. /home/git/.ssh 映射到容器中Gitea写入.ssh的位置,一般是/home/git/.ssh,可以通过Gitea app.ini的SSH_ROOT_PATH配置(配置此项请参考Gitea文档的Config Cheatsheet)。
  5. 尝试在Gitea中添加一些密钥,检查宿主机目录中的/home/git/.ssh/authorized_keys中是否有内容,如果没有内容,则需要在Gitea后台中的“计划任务”页面手动执行“更新.ssh/authorized_keys”任务。然后找到要执行的命令是什么,即command=后的内容,一般是/usr/local/bin/gitea ...
  6. 在宿主机上同样的位置创建一个转发用的脚本并赋予执行权限,将SSH命令转发到容器中。

    #!/bin/bash
    docker exec -u git -i -e SSH_ORIGINAL_COMMAND="$SSH_ORIGINAL_COMMAND" gitea /usr/local/bin/gitea $@
    # For K8s
    #_PARAMETERS=$@
    #kubectl --kubeconfig /path/to/kubeconfig exec deployments/gitea -i -q -- su git -l -s /bin/sh -- -c "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" /usr/local/bin/gitea $_PARAMETERS""
  7. 测试拉取推送代码
评论 0
没有评论
评论已关闭
发表评论
评论 取消回复
Copyright © 2026 Zapic's Blog