[GH-ISSUE #4064] 配置文件修改为 toml 格式后无法通过 ssh 访问 gitlab #3211

Closed
opened 2026-05-05 14:04:39 -06:00 by gitea-mirror · 2 comments
Owner

Originally created by @WindSpiritSR on GitHub (Mar 13, 2024).
Original GitHub issue: https://github.com/fatedier/frp/issues/4064

Bug Description

  1. 三个端都使用 TOML 配置时,无法使用 ssh 访问 gitlab 仓库
  2. 保持 1 中配置,将 frpc proxies 绑定的业务切换为普通 ssh server 时可以正常访问
  3. 保持 1 中配置,将 frpc visitors 端配置格式切换为 Ini,可以正常通过 gitlab ssh 访问仓库
  4. frps 及 frpc proxies 使用 TOML 或 Ini 对测试结果没有影响

frpc Version

0.55.1

frps Version

0.55.1

System Architecture

linux/amd64

Configurations

frps

IniTOML
[common]
bind_port = 11234
token = token
tls_only = false
bindPort = 11234
auth.token = "token"
transport.tls.force = false

frpc proxies

IniTOML
[common]
server_addr = example.com
server_port = 11234
token = token
login_fail_exit = false
tls_enable = true

[gitlab]
type = stcp
local_ip = 10.0.0.1
local_port = 12322
sk = secretkey
serverAddr = "example.com"
serverPort = 11234
auth.token = "token"
loginFailExit = false
transport.tls.enable = true

[[proxies]]
name = "gitlab"
type = "stcp"
localIP = "10.0.0.1"
localPort = 12322
secretKey = "secretkey"

frpc visitors

IniTOML
[common]
server_addr = frps_container_name
server_port = 11234
token = token
login_fail_exit = false
tls_enable = true

[gitlab_visitor]
role = visitor
server_name = gitlab
type = stcp
bind_addr = frpc_container_name
bind_port = 11122
sk = secretkey
serverAddr = "frps_container_name"
serverPort = 11234
auth.token = "token"
loginFailExit = false
transport.tls.enable = true

[[visitors]]
name = "gitlab_visitor"
serverName = "gitlab"
type = "stcp"
bindAddr = "frpc_container_name"
bindPort = 11122
secretKey = "secretkey"

Logs

No response

Steps to reproduce

git clone 返回如下

Cloning into 'repo_name'...
ssh: connect to host git.example.com port 22: Connection refused
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

ssh -vvv -T 返回如下

OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
debug1: Reading configuration data C:\\Users\\user/.ssh/config
debug3: Failed to open file:C:/ProgramData/ssh/ssh_config error:2
debug2: resolving "git.example.com" port 22
debug2: ssh_connect_direct
debug1: Connecting to git.example.com [93.184.216.34] port 22.
debug3: finish_connect - ERROR: async io completed with error: 10061, io:0000019AEE04E440
debug1: connect to address 93.184.216.34 port 22: Connection refused
ssh: connect to host git.example.com port 22: Connection refused

三个 frp 端均使用 docker 部署,dockerfile 如下

FROM alpine:3.19.0

ENV TZ=Asia/Shanghai

COPY ./frp_*_linux_amd64.tar.gz /tmp/frp_linux_amd64.tar.gz

WORKDIR /app

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
    && apk update \
    && apk upgrade \
    && apk add --no-cache tzdata \
    && ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
    && echo ${TZ} > /etc/timezone \
    && tar zxvf /tmp/frp_linux_amd64.tar.gz -C /tmp --strip-components 1 \
    && mv /tmp/frpc /app/frpc \
    && rm -rf /tmp/*

ENTRYPOINT ["./frpc"]

CMD ["-c", "./frpc.toml"]

服务器端 frps 及 frpc visitors docker-compose.yml 如下

version: '3'

services:
  frps:
    build:
      context: ./frp/dockerfiles
      dockerfile: frps.Dockerfile
    container_name: frps
    hostname: frps
    volumes:
      - ./frp/config/frps.toml:/app/frps.toml:ro
    ports:
      - '11234:11234'
    networks:
      net:
        priority: 10
        ipv4_address: 172.20.0.1
    restart: unless-stopped
    tty: true

  frpc:
    build:
      context: ./frp/dockerfiles
      dockerfile: frpc.Dockerfile
    container_name: frpc
    hostname: frpc
    volumes:
      - ./frp/config/frpc.toml:/app/frpc.toml:ro
    ports:
      - '22:11122'
    networks:
      net:
        priority: 10
        ipv4_address: 172.20.0.2
    restart: unless-stopped
    tty: true

networks:
  net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24

局域网 frpc proxies docker-compose.yml 如下

version: '3'

services:
  frpc:
    build:
      context: ./frp/dockerfiles
      dockerfile: frpc.Dockerfile
    container_name: frpc
    hostname: frpc
    volumes:
      - ./frp/config/frpc.toml:/app/frpc.toml:ro
    networks:
      net:
        priority: 10
        ipv4_address: 172.20.0.1
    restart: unless-stopped
    tty: true

networks:
  net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24

Affected area

  • Docs
  • Installation
  • Performance and Scalability
  • Security
  • User Experience
  • Test and Release
  • Developer Infrastructure
  • Client Plugin
  • Server Plugin
  • Extensions
  • Others
Originally created by @WindSpiritSR on GitHub (Mar 13, 2024). Original GitHub issue: https://github.com/fatedier/frp/issues/4064 ### Bug Description 1. 三个端都使用 TOML 配置时,无法使用 ssh 访问 gitlab 仓库 2. 保持 1 中配置,将 frpc proxies 绑定的业务切换为普通 ssh server 时可以正常访问 3. 保持 1 中配置,将 frpc visitors 端配置格式切换为 Ini,可以正常通过 gitlab ssh 访问仓库 4. frps 及 frpc proxies 使用 TOML 或 Ini 对测试结果没有影响 ### frpc Version 0.55.1 ### frps Version 0.55.1 ### System Architecture linux/amd64 ### Configurations ## frps <table> <tr><th>Ini</th><th>TOML</th></tr> <tr> <td> ```ini [common] bind_port = 11234 token = token tls_only = false ``` </td> <td> ```toml bindPort = 11234 auth.token = "token" transport.tls.force = false ``` </td> </tr> </table> ## frpc proxies <table> <tr><th>Ini</th><th>TOML</th></tr> <tr> <td> ```ini [common] server_addr = example.com server_port = 11234 token = token login_fail_exit = false tls_enable = true [gitlab] type = stcp local_ip = 10.0.0.1 local_port = 12322 sk = secretkey ``` </td> <td> ```toml serverAddr = "example.com" serverPort = 11234 auth.token = "token" loginFailExit = false transport.tls.enable = true [[proxies]] name = "gitlab" type = "stcp" localIP = "10.0.0.1" localPort = 12322 secretKey = "secretkey" ``` </td> </tr> </table> ## frpc visitors <table> <tr><th>Ini</th><th>TOML</th></tr> <tr> <td> ```ini [common] server_addr = frps_container_name server_port = 11234 token = token login_fail_exit = false tls_enable = true [gitlab_visitor] role = visitor server_name = gitlab type = stcp bind_addr = frpc_container_name bind_port = 11122 sk = secretkey ``` </td> <td> ```toml serverAddr = "frps_container_name" serverPort = 11234 auth.token = "token" loginFailExit = false transport.tls.enable = true [[visitors]] name = "gitlab_visitor" serverName = "gitlab" type = "stcp" bindAddr = "frpc_container_name" bindPort = 11122 secretKey = "secretkey" ``` </td> </tr> </table> ### Logs _No response_ ### Steps to reproduce `git clone` 返回如下 ``` Cloning into 'repo_name'... ssh: connect to host git.example.com port 22: Connection refused fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. ``` `ssh -vvv -T` 返回如下 ``` OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2 debug1: Reading configuration data C:\\Users\\user/.ssh/config debug3: Failed to open file:C:/ProgramData/ssh/ssh_config error:2 debug2: resolving "git.example.com" port 22 debug2: ssh_connect_direct debug1: Connecting to git.example.com [93.184.216.34] port 22. debug3: finish_connect - ERROR: async io completed with error: 10061, io:0000019AEE04E440 debug1: connect to address 93.184.216.34 port 22: Connection refused ssh: connect to host git.example.com port 22: Connection refused ``` 三个 frp 端均使用 docker 部署,dockerfile 如下 ```dockerfile FROM alpine:3.19.0 ENV TZ=Asia/Shanghai COPY ./frp_*_linux_amd64.tar.gz /tmp/frp_linux_amd64.tar.gz WORKDIR /app RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \ && apk update \ && apk upgrade \ && apk add --no-cache tzdata \ && ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \ && echo ${TZ} > /etc/timezone \ && tar zxvf /tmp/frp_linux_amd64.tar.gz -C /tmp --strip-components 1 \ && mv /tmp/frpc /app/frpc \ && rm -rf /tmp/* ENTRYPOINT ["./frpc"] CMD ["-c", "./frpc.toml"] ``` 服务器端 frps 及 frpc visitors `docker-compose.yml` 如下 ```yml version: '3' services: frps: build: context: ./frp/dockerfiles dockerfile: frps.Dockerfile container_name: frps hostname: frps volumes: - ./frp/config/frps.toml:/app/frps.toml:ro ports: - '11234:11234' networks: net: priority: 10 ipv4_address: 172.20.0.1 restart: unless-stopped tty: true frpc: build: context: ./frp/dockerfiles dockerfile: frpc.Dockerfile container_name: frpc hostname: frpc volumes: - ./frp/config/frpc.toml:/app/frpc.toml:ro ports: - '22:11122' networks: net: priority: 10 ipv4_address: 172.20.0.2 restart: unless-stopped tty: true networks: net: driver: bridge ipam: config: - subnet: 172.20.0.0/24 ``` 局域网 frpc proxies `docker-compose.yml` 如下 ```yml version: '3' services: frpc: build: context: ./frp/dockerfiles dockerfile: frpc.Dockerfile container_name: frpc hostname: frpc volumes: - ./frp/config/frpc.toml:/app/frpc.toml:ro networks: net: priority: 10 ipv4_address: 172.20.0.1 restart: unless-stopped tty: true networks: net: driver: bridge ipam: config: - subnet: 172.20.0.0/24 ``` ### Affected area - [ ] Docs - [ ] Installation - [ ] Performance and Scalability - [ ] Security - [ ] User Experience - [ ] Test and Release - [ ] Developer Infrastructure - [ ] Client Plugin - [ ] Server Plugin - [ ] Extensions - [ ] Others
Author
Owner

@fatedier commented on GitHub (Mar 18, 2024):

先从一个最简单的 tcp 端口映射开始,通过 telnet 验证即可,否则配置内容太多,环境复杂,干扰因素也很多。

<!-- gh-comment-id:2002785764 --> @fatedier commented on GitHub (Mar 18, 2024): 先从一个最简单的 tcp 端口映射开始,通过 telnet 验证即可,否则配置内容太多,环境复杂,干扰因素也很多。
Author
Owner

@WindSpiritSR commented on GitHub (Mar 20, 2024):

已确认由于配置中存在两个同名但不同配置的 visitor 导致 toml 配置无法正常运行,THX

<!-- gh-comment-id:2009630373 --> @WindSpiritSR commented on GitHub (Mar 20, 2024): 已确认由于配置中存在两个同名但不同配置的 visitor 导致 toml 配置无法正常运行,THX
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/frp#3211
No description provided.