SFTPGo:高可配多协议,直连云存储

项目概述

SFTPGo 是一款用 Go 构建的全功能、可高度配置的文件传输服务器,旨在让企业以一致方式在本地与云端安全交换与存储文件。它同时支持 SFTP、HTTP/S、FTP/S、WebDAV 多协议,后端可无缝接入本地与加密文件系统、S3 兼容对象存储、Google Cloud Storage、Azure Blob 及其他 SFTP 服务器。项目通过事件驱动架构与丰富策略实现精细化的账号、目录与权限管理,内置 WebAdmin 与 WebClient,既便于管理员集中运维,也让终端用户可在浏览器中管理文件与开启 TOTP 双因素认证。SFTPGo 的独特价值在于统一了多协议入口与多云存储,极大降低集成复杂度,保留现有工具与流程的同时获得企业级的安全性与可观测性。

项目统计

:bar_chart: 项目概况

:star: 10942 Stars | :fork_and_knife: 852 Forks | :eyes: 10942 Watchers | :bug: 121 Issues

:page_facing_up: 开源协议: GNU Affero General Public License v3.0 | :date: 创建于: 2019-07-20 | :counterclockwise_arrows_button: 更新于: 2025-09-02

:laptop: 技术栈

该项目主要使用 Go 开发,占代码库的 85.2%。此外还包含 HTML (14.4%)、Shell (0.2%)、JavaScript (0.1%)

核心功能

  • 多协议服务端:SFTP、HTTP/S、FTP/S、WebDAV 一站式提供,统一入口降低集成成本,适配多样客户端与自动化脚本。
  • 多存储后端:本地与加密本地文件系统、S3 兼容对象存储、Google Cloud Storage、Azure Blob,以及上游 SFTP 服务器,按需组合,平滑迁移与扩容。
  • WebAdmin:可视化创建与管理用户、文件夹、分组及资源,轻松落地访问控制、隔离与配额策略,运维友好。
  • WebClient:终端用户可自助修改凭据,在浏览器中浏览/上传/管理文件,并开启基于 TOTP 的双重验证(支持 Microsoft/Google/Authy 等)。
  • 事件驱动架构:围绕文件与用户操作触发处理流程,便于对接企业现有的自动化与审计体系。
  • 高度可配置:灵活的策略与参数,让同一套部署覆盖开发、测试与生产环境,既能服务内部协作,也能面向外部伙伴安全传输。

更多功能特性正在不断完善中。

技术架构

系统采用Go构建,围绕“协议前端 + 统一存储抽象 + 事件驱动”的分层架构。最外层提供SFTP(基于SSH)、HTTP/S、FTP/S、WebDAV等服务端实现,统一接入认证、ACL与会话管理,并支持TOTP两步验证。核心通过可插拔的Storage驱动屏蔽差异,既支持本地与加密文件系统,也可直连S3兼容对象存储、GCS、Azure Blob以及上游SFTP。

事件总线在上传/下载/登录等关键点触发钩子,便于审计与自动化。WebAdmin与WebClient基于内置API构建,实现用户、组、配额与目录的可视化管理。请求流程:客户端接入协议前端→鉴权与策略检查→路由至存储驱动→数据流经TLS/SSH安全通道直达后端。凭借Go并发模型与单一二进制部署,整体具备高性能、可扩展、易运维与跨平台优势。

使用指南

推荐用 Docker 快速起步,也可原生运行。步骤:

  • 启动容器并持久化数据与配置,映射 SFTP(2022) 与 Web(8080):
docker run -d --name sftpgo \
  -p 2022:2022 -p 8080:8080 \
  -v sftpgo-data:/var/lib/sftpgo \
  -v sftpgo-config:/etc/sftpgo \
  drakkan/sftpgo:latest
  • 初始化:打开 http://localhost:8080 ,按向导创建管理员;在 WebAdmin 新建用户 user1,主目录如 /data/user1(容器内),并设置密码。
  • 连接测试:
sftp -P 2022 user1@localhost
sftp> put yourfile.txt
sftp> get yourfile.txt
version: "3.8"
services:
  sftpgo:
    image: drakkan/sftpgo:latest
    ports: ["2022:2022", "8080:8080"]
    volumes:
      - sftpgo-data:/var/lib/sftpgo
      - sftpgo-config:/etc/sftpgo
volumes: {sftpgo-data: {}, sftpgo-config: {}}
  • 原生运行(需 Go 1.21+):
go install github.com/drakkan/sftpgo/cmd/sftpgo@latest
sftpgo serve

提示:挂载 /var/lib/sftpgo 保存文件,/etc/sftpgo 保存配置,端口可按需修改。

总结评价

作为用Go实现的事件驱动文件传输服务,SFTPGo以多协议(SFTP/HTTP(S)/FTP(S)/WebDAV)与多后端(本地/加密本地、S3、GCS、Azure、上游SFTP)为核心优势,配套WebAdmin与WebClient并支持2FA。约1万+Stars与Awesome Go收录显示其活跃度与认可度。亮点在于统一存储抽象、细粒度配置与事件钩子扩展,适合混合云与伙伴对接的统一入口。建议采用前评估AGPL-3.0合规、性能与高可用需求;中小规模可直接部署,大规模需压测并完善监控/审计集成。后续可关注云原生部署、企业特性与生态扩展进展。