Skip to content

leffss/sftpd

Repository files navigation

sftpd - SFTP server library in Go

基于 github.com/taruti/sftpd 截止 2020.04.02 的版本, 这个项目功能没有 github.com/pkg/sftp 全且更新慢, 但是可取的地方是使用了 FileSystem 接口来提供对目录的读写操作, 这样子就可以很方便的各种实现文件系统, 包括本地文件系统或者连接后端的 sftp server 的文件系统.

相对于原版做了以下修改:

  • 修正不支持 SSH_FXP_EXTENDED 请求的问题
  • 实现了一个本地可读写的文件系统接口 LocalFs,使用方法见 example/localfs
  • 实现了一个后端为 sftp 的可读写的文件系统接口 sftpFs,使用方法见 example/sftpfs
  • 添加软链接等特殊文件的支持(仅支持 liunx)
  • 添加重命名功能
  • 添加文件时间显示
  • 添加用户、组显示(仅支持 linux)
  • 添加中文兼容

开启 debug 显示

go build -tags debug -a

默认使用 log 输出

功能测试

sftp 客户端: sfx, xftp, winscp

文件系统: LocalFs

通过:

  • 显示列表
  • 下载文件
  • 下载目录
  • 上传文件
  • 上传目录
  • 删除文件
  • 删除目录
  • 重命名文件
  • 重命名目录
  • 修改文件属性
  • 修改目录属性
  • 显示文件时间
  • 显示文件大小
  • 显示软链接等特殊文件(仅支持 linux 服务端)
  • 显示宿主(用户和组)(仅支持 linux 服务端)

不通过:

  • 创建软链接

文件系统: sftpFs

通过:

  • 显示列表
  • 下载文件
  • 下载目录
  • 上传文件
  • 上传目录
  • 删除文件
  • 删除目录
  • 重命名文件
  • 重命名目录
  • 修改文件属性
  • 修改目录属性
  • 显示文件时间
  • 显示文件大小
  • 显示软链接等特殊文件(仅支持 linux 服务端)
  • 显示宿主(用户和组,只支持显示 uid 和 gid)(仅支持 linux 服务端)

不通过:

  • 创建软链接

TODO

  • 创建软链接