Docker部署自建Gitea服务器的SSH认证故障排查
Docker部署Gitea后SSH认证失败,始终要求输入密码
环境信息
- 服务器:Ubuntu Server 22.04 LTS x86_64
- 部署方式:Docker Compose官方最小化部署,仅运行Gitea服务
- Web状态:功能正常,可创建账号、组织、仓库,用户SSH密钥添加并验证成功
Docker Compose配置
version: "3" networks: gitea: external: false services: server: image: gitea/gitea:latest container_name: gitea environment: - USER_UID=115 - USER_GID=120 - GITEA__database__DB_TYPE=postgres - GITEA__database__HOST=db:5432 - GITEA__database__NAME=gitea - GITEA__database__USER=gitea - GITEA__database__PASSWD=gitea restart: always networks: - gitea volumes: - ./gitea:/data - /home/git/.ssh/:/data/git/.ssh - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "127.0.0.1:2222:22" depends_on: - db db: image: postgres:latest restart: always environment: - POSTGRES_USER=gitea - POSTGRES_PASSWORD=gitea - POSTGRES_DB=gitea networks: - gitea volumes: - ./postgres:/var/lib/postgresql/data
问题现象
执行命令ssh -p 22 git@192.168.1.230时,始终被要求输入密码(尝试多种密码均无效),无法出现预期的认证成功提示:
Hi there, You've successfully authenticated, but Gitea does not provide shell access.
已尝试参考SSH Shim文档添加/home/git/.ssh/:/data/git/.ssh挂载,但问题未得到改善。
问题排查方向
- 端口映射错误:当前docker-compose中SSH端口映射为
127.0.0.1:2222:22,意味着容器22端口仅绑定到宿主机回环地址,外部无法访问。你执行的ssh -p 22实际连接的是宿主机本身的22端口(非Gitea容器),需修改映射为0.0.0.0:2222:22,然后用ssh -p 2222 git@192.168.1.230测试。 - SSH密钥权限不匹配:检查宿主机
/home/git/.ssh目录及文件权限,需确保目录权限为drwx------,authorized_keys文件权限为-rw-------,且归属的用户/组UID/GID与容器内的USER_UID=115、USER_GID=120一致。 - 容器内密钥与日志检查:进入Gitea容器(
docker exec -it gitea bash),查看/data/git/.ssh/authorized_keys是否包含你添加的公钥;同时查看容器内SSH认证日志(cat /var/log/auth.log),获取具体失败原因。 - 宿主机SSH服务冲突:确认宿主机本身的SSH服务是否占用22端口,执行
ss -tulpn | grep 22查看端口监听情况,若宿主机SSH在运行,直接连接22端口会被宿主机处理而非Gitea容器。
内容的提问来源于stack exchange,提问作者twieg
相关产品推荐
相关产品推荐

