ScriptsMay 4, 2026·3 min read

SFTPGo — Self-Hosted Secure File Transfer Server

SFTPGo is a full-featured SFTP, FTP/S, WebDAV, and HTTP/S file server written in Go, supporting virtual folders, multiple storage backends including S3 and GCS, and a web admin interface for user and quota management.

Introduction

SFTPGo is a modern, fully-featured file transfer server that supports SFTP, SCP, FTP/S, WebDAV, and HTTP/S file sharing. Written in Go, it replaces legacy OpenSSH-based SFTP setups with a secure, performant server that includes a web admin panel, virtual users (no OS accounts needed), and pluggable storage backends.

What SFTPGo Does

  • Serves files via SFTP, SCP, FTP/S, WebDAV, and HTTP/S from a single process
  • Manages virtual users with quotas, bandwidth limits, and per-directory permissions
  • Supports multiple storage backends: local disk, S3, GCS, Azure Blob, and encrypted local
  • Provides a web admin panel and REST API for user and configuration management
  • Triggers event actions (webhooks, scripts, email) on file upload, download, or deletion

Architecture Overview

SFTPGo is a single Go binary with an event-driven architecture. Each protocol (SFTP, FTP, WebDAV, HTTP) runs as a listener sharing a common virtual filesystem layer. User data is stored in SQLite, PostgreSQL, or MySQL. The virtual filesystem abstraction maps user home directories to any storage backend transparently.

Self-Hosting & Configuration

  • Deploy via Docker, native packages (deb/rpm), or a single binary download
  • Configure via sftpgo.json, environment variables, or the web admin UI
  • Choose database backend: embedded SQLite for single-node, PostgreSQL for HA
  • Set up TLS certificates for FTPS and HTTPS; SFTP uses SSH host keys
  • Integrate with external auth via LDAP, HTTP hooks, or PAM modules

Key Features

  • Multi-protocol: SFTP, SCP, FTP/S, WebDAV, HTTP/S from one server
  • Virtual users with no OS account requirement and fine-grained permissions
  • Storage backends: local, S3, GCS, Azure Blob, SFTP-to-SFTP proxy, encrypted FS
  • Event system with webhooks, email notifications, and custom scripts
  • Two-factor authentication and IP-based access rules

Comparison with Similar Tools

  • OpenSSH sftp-server — requires OS users, no web UI; SFTPGo uses virtual users with quotas
  • ProFTPD — FTP-focused with complex config; SFTPGo is multi-protocol with modern defaults
  • vsftpd — FTP only, minimal features; SFTPGo adds SFTP, WebDAV, and cloud storage backends
  • Nextcloud — full collaboration suite; SFTPGo is focused on file transfer protocols
  • MinIO — S3-only interface; SFTPGo provides traditional file transfer protocols over any backend

FAQ

Q: Do I need to create Linux users for each SFTP account? A: No. SFTPGo uses virtual users stored in its database. No OS accounts needed.

Q: Can I use S3 as the storage backend? A: Yes. Configure an S3 bucket as a user's home directory or as a virtual folder.

Q: Does it support public key authentication? A: Yes, with per-user authorized keys, certificate auth, and keyboard-interactive methods.

Q: How do I monitor transfers? A: Use the REST API, web admin live connections view, or configure event actions for logging.

Sources

Discussion

Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.

Related Assets