开源SFTP服务器软件SFTPGo

什么是 SFTPGo?

SFTPGo 是一种事件驱动的文件传输解决方案。它支持多种协议(SFTP、SCP、FTP/S、WebDAV、HTTP/S)和多种存储后端,包括本地文件系统、加密本地文件系统、S3(兼容)对象存储、Google Cloud StorageAzure Blob Storage、其他 SFTP 服务器。

使用 SFTPGo,您可以利用本地和云存储后端,使用您已经熟悉的相同工具和流程在内部或与业务伙伴交换和存储文件。

通过👇这张系统架构图,可能更容易理解 SFTPGo 的功能

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 sftpgo ,选择第一个 drakkan/sftpgo,版本选择 latest

本文写作时, latest 版本对应为 v2.6.2

最近不知道 Docker hub 又发了什么癫,是调整了算法还是什么原因,总之搜出来都是乱七八糟的,不管搜什么,都显示 10000 个项目

docker 文件夹中,创建一个新文件夹 sftpgo,并在其中建两个子文件夹 datakey

文件夹 装载路径 说明
docker/sftpgo/data /srv/sftpgo 存放数据
docker/sftpgo/key /var/lib/sftpgo 系统主目录

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口 说明
2021 8080 Web UI 的端口
2022 2022 SFTP 协议使用的端口
2023 2023 WebDAV 协议使用的端口

默认没有对外暴露端口

需要点 + 号逐个添加

环境

可变
SFTPGO_WEBDAVD__BINDINGS__0__PORT WebDAV 协议的容器端口,设为 2023

系统默认支持只支持 SFTP 协议,通过环境变量设置,增加了 WebDAV 协议

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 新建文件夹 sftpgo 和 子目录
mkdir -p /volume1/docker/sftpgo/{data,key}

# 进入 sftpgo 目录
cd /volume1/docker/sftpgo

# 修改目录所有者
chown -R 1000:1000 {data,key}

# 运行容器
docker run -d \
--restart unless-stopped \
--name sftpgo \
-p 2021:8080 \
-p 2022:2022 \
-p 2023:2023 \
-v $(pwd)/data:/srv/sftpgo \
-v $(pwd)/key:/var/lib/sftpgo \
-e SFTPGO_WEBDAVD__BINDINGS__0__PORT=2023 \
drakkan/sftpgo

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: '3'

services:
sftpgo:
image: drakkan/sftpgo
container_name: sftpgo
restart: unless-stopped
ports:
- 2021:8080
- 2022:2022
- 2023:2023
volumes:
- ./data:/srv/sftpgo
- ./key:/var/lib/sftpgo
environment:
- SFTPGO_WEBDAVD__BINDINGS__0__PORT=2023

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
# 新建文件夹 sftpgo 和 子目录
mkdir -p /volume1/docker/sftpgo/{data,key}

# 进入 sftpgo 目录
cd /volume1/docker/sftpgo

# 修改目录所有者
chown -R 1000:1000 {data,key}

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

后端(WebAdmin)

在浏览器中输入 http://群晖IP:2021 就能看到注册界面

登录成功后的后台管理的主界面

是否要启用双因素认证,看个人需要了,如果只是局域网,可以不启用

新建 virtual folders

Add 添加,在 Storage 中可以选择类型

  • Storage:选择 Local disk
  • Root directory:填入我们挂载的数据目录 /srv/sftpgo

保存之后,就有了第一个虚拟存储

再新建一个用户用于测试

  • Username:用户名
  • Password:密码

下拉到 Virtual folders 部分,授权用户可使用的目录

  • mount path:用户看到的名称,需要自己输入,例如 /nas
  • Select a path:下拉选择,这是我们前面创建的 Virtual folders

完成后点 Add

Save 保存之后

Sign Out 退出管理端

前端(WebClient)

回到登录界面后,Go to WebClient

输入账号密码

登录成功后,会看到我们授权的目录

可以上传文件

服务器上保存的目录

SFTP 访问

RaiDrive 为例

  • 协议:选择 SFTP 协议
  • 地址:填入SFTPGo 服务地址
  • 端口:填入我们前面设置的本机端口地址 2022
  • 账号:填入 SFTPGo 的用户
  • 密码:填入 SFTPGo 的用户对应的密码

如果是使用 WinSCP,也可以参考上面👆的设置

WebDAV 访问

按安装时的环境变量设置,WebDAV 的访问地址是 http://群晖IP:2023

RaiDrive 为例

  • 协议:选择 WebDAV 协议
  • 地址:填入SFTPGo 服务地址
  • 端口:填入我们前面设置的本机端口地址 2023
  • 账号:填入 SFTPGo 的用户
  • 密码:填入 SFTPGo 的用户对应的密码

如果是使用 WinSCP,也可以参考上面👆的设置

RaiDrive 中添加成功后

可以在资源管理器中直接访问

这和我们在 WebClient 看到的结构是一致的

WinSCP 也是一样的

参考文档

drakkan/sftpgo: Fully featured and highly configurable SFTP server with optional HTTP/S, FTP/S and WebDAV support - S3, Google Cloud Storage, Azure Blob
地址:https://github.com/drakkan/sftpgo

SFTPGo - Bring your file transfers anywhere
地址:https://sftpgo.com/

SFTPGo documentation
地址:https://sftpgo.github.io/latest/