Docker 撰写 gitea 远程 ssh 连接被拒绝

Docker 撰写 gitea 远程 ssh 连接被拒绝

我已经使用这个 docker-compose 配置在 Ubuntu 服务器上设置了 Gitea:

version: '3.9'
services:
  db:
    image: docker.io/bitnami/postgresql:15
    volumes:
      - 'db_data:/bitnami/postgresql'
    environment:
      - POSTGRESQL_DATABASE=gitea
      - POSTGRESQL_USERNAME=gitea
      - POSTGRESQL_PASSWORD=gitea

  gitea:
    image: docker.io/bitnami/gitea:1
    volumes:
      - 'gitea_data:/bitnami/gitea'
    environment:
      - GITEA_DATABASE_HOST=db
      - GITEA_DATABASE_NAME=gitea
      - GITEA_DATABASE_USERNAME=gitea
      - GITEA_DATABASE_PASSWORD=gitea
      - GITEA_ADMIN_USER=example
      - GITEA_ADMIN_PASSWORD=example
      - [email protected]
      - GITEA_APP_NAME=Example Technologies
      - GITEA_DOMAIN=gitea.example.com
      - GITEA_SSH_DOMAIN=gitea.example.com
      - GITEA_SSH_PORT=22
      - GITEA_ROOT_URL=https://gitea.example.com/
      - GITEA_SMTP_ENABLED=true
      - GITEA_SMTP_HOST=smtp-relay.gmail.com:25
      - [email protected]
    ports:
      - '5050:3000'
      - '22:2222'

volumes:
  db_data:
  gitea_data:

我的常规 ssh 服务在端口 1026 上运行,因此应该没有端口冲突,这是我的 UFW

status:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
80,443/tcp (Apache Full)   ALLOW IN    Anywhere                  
Anywhere on docker0        ALLOW IN    172.17.0.0/16             
1026/tcp                   ALLOW IN    Anywhere                  
22/tcp                     ALLOW IN    Anywhere                  
80,443/tcp (Apache Full (v6)) ALLOW IN    Anywhere (v6)             
1026/tcp (v6)              ALLOW IN    Anywhere (v6)             
22/tcp (v6)                ALLOW IN    Anywhere (v6)

当尝试使用 ssh 从远程机器连接进行测试时:

ssh [email protected]
ssh: connect to host gitea.example.com port 22: Connection refused

但是在服务器上通过端口 1026 上的 ssh 进行本地测试时,我在服务器上执行相同的命令时出现此问题:

ssh [email protected]
[email protected]: Permission denied (publickey).

所以我真的不确定发生了什么,就像传入到端口 22 的远程流量被阻止了,但是即使禁用了 UFW,当我尝试从远程机器连接时,仍然会收到“连接被拒绝”的信息。

我也尝试使用 tcpdump 来查看发生了什么,但只能看到端口 22 上没有任何东西响应来自远程连接的传入数据包,再次在运行 gitea 的服务器上通过端口 22 本地连接时,我看到用于启动 SSH 连接的正常 TCP 流量。

我查看了 IP 表并且我发现引用端口 22 的唯一行以 ACCEPT 开头。

在 gitea 容器的日志中,我可以看到以下内容,表明 SSH 服务器已正确配置为在端口 2222 上启动:

gitea-gitea-1  | 2023/05/25 09:57:29 ...s/graceful/server.go:62:NewServer() [I] [646f3109-19] Starting new SSH server: tcp::2222 on PID: 1
gitea-gitea-1  | 2023/05/25 09:57:29 cmd/web.go:220:listen() [I] [646f3109-27] Listen: http://0.0.0.0:3000
gitea-gitea-1  | 2023/05/25 09:57:29 cmd/web.go:224:listen() [I] [646f3109-27] AppURL(ROOT_URL): https://gitea.example.com/
gitea-gitea-1  | 2023/05/25 09:57:29 ...s/graceful/server.go:62:NewServer() [I] [646f3109-27] Starting new Web server: tcp:0.0.0.0:3000 on PID: 1

有人能提供任何建议吗?这里可能出了什么问题,或者我该如何找到问题的根源?

答案1

我设法利用此处的信息解决了这个问题:Docker 破坏了 libvirt 桥接网络

基本上我向 ufw 添加了以下规则:

172.20.0.2 2222/tcp ALLOW FWD Anywhere # allow gitea-gitea-1 2222/tcp gitea_default

相关内容