Theme
Import file formats
The guided import reads the same file in the Portal and on each Connector. It recognizes the file by its content; you can also name the format in the dialog.
| Product | File | What carries |
|---|---|---|
| Syncplify Server (V6 and later) | The CSV from the user export, or a backup archive (ssrv-backup.json inside a zip) | Users, passwords (as stored), SSH keys, protocols, allow lists, home and virtual folders on Disk storage |
| Syncplify Server V4 or V5 | A backup archive (the zip holding smserver-*.json) | The same; passwords of these generations carry too |
| Cerberus FTP Server | The CSV from User Manager, Export | Users, passwords (as stored), protocols, allow lists, directories |
| SFTPGo | The dump from sftpgo dumpdata or the admin UI's export (JSON) | Users, passwords (as stored), SSH keys, protocols, allow lists, home and virtual folders on local storage |
| FileZilla Server 1.x | users.xml, zipped together with groups.xml | Users, passwords (as stored, MD5 excluded), allow lists, mount points |
| FileZilla Server 0.9.x | FileZilla Server.xml | Users, passwords (as stored, MD5 excluded), allow lists, directories and aliases, group inheritance |
| Anything else | The SFTP.cloud CSV template below | Whatever you fill in |
The import never reads server settings, certificates, host keys, scripts or event handlers from any of these files, and it never stores the file.
Syncplify Server
Export the users to CSV from the Syncplify Server admin UI, or take a backup archive. Both carry the password hashes, so people keep their passwords. Storage of type Disk becomes a storage location the Connector import can point at; other storage types (S3, Azure, SFTP) are listed in the preview as not importable, because their credentials are encrypted under the old server's own key. Create those storage backends on the Connector by hand.
Cerberus FTP Server
In User Manager choose Export and save the CSV. Cerberus does not write its PBKDF2 round count into the export; read it from the server's settings.xml and enter it in the import dialog, otherwise the carried passwords cannot verify. Directory permission masks map onto the SFTP.cloud verbs; the "share" flag is not a permission here and is only noted. %USER% in a directory path is expanded per user.
SFTPGo
Run sftpgo dumpdata --output-file dump.json (or use the admin UI's export) and import the JSON. bcrypt, Argon2id and PBKDF2 passwords carry; unix crypt and bare digests do not. Users and virtual folders on providers other than local storage are listed as not importable; create those backends on the Connector by hand.
FileZilla Server
For 1.x, zip users.xml and groups.xml (both live in the server's configuration directory) into one archive and import that; without groups.xml, group memberships are not applied. For 0.9.x import FileZilla Server.xml. Passwords stored as PBKDF2 or as a salted SHA digest carry; accounts still on unsalted MD5 receive a generated password. FileZilla Server serves FTP only, so imported accounts get FTPS and FTPES; enable SFTP per user afterwards if wanted. This is FileZilla Server, not the FileZilla desktop client your users may run.
Hosted services: Files.com, Couchdrop, MOVEit
No hosted service exports password hashes, so accounts from these services arrive with SSH keys where the service exports them, and with a generated password otherwise. Export the users through the service's API or bulk export into the CSV template below: username, email, public keys, and the folders each user may reach. The files themselves stay in the service until you move them: a Connector can read the old service over SFTP as a storage backend and copy everything into your own storage with a one way transfer, repeated until the cutover.
The SFTP.cloud CSV template
A CSV whose first row names the columns. Column names are matched ignoring case, spaces and underscores. Only username is required.
| Column | Meaning |
|---|---|
username | The account name. Names are rewritten to lowercase letters, digits, dots, underscores and hyphens; the preview shows every rename. |
password | A plaintext password, used as is. |
passwordhash | A password hash instead of a password (see the grammar below). Never both. |
email | The address shown in the Portal. |
status | Enabled or Disabled; or the disabled column with true or false. |
subsystems | Comma separated: ssh2_sftp, ftps, ftpes, https. Empty means every protocol. Plain ftp maps to the two TLS flavors. |
allowlist | Comma separated addresses or networks the account may sign in from. |
publickey1, publickey2, and so on | SSH public keys, one per column, in authorized_keys form. |
homepath | The home folder as an absolute path on the old server. |
permissions | Comma separated verbs on the home: dirList, dirMake, dirEditMetadata, dirRename, dirDelete, fileGet, filePut, fileModify, fileEditMetadata, fileRename, fileDelete, symlink. Empty means all. |
vfoldername1, vfolderpath1, vfolderperms1, then 2, 3, and so on | Extra folders mounted under the given name. |
A row with a home and no folders is a plain account; a row with no home is imported as an account with no storage, to be granted on a Connector by hand.
The passwordhash grammar
| Form | Meaning |
|---|---|
sha256$<salt hex>$<digest hex> | A single SHA-256 over the salt followed by the password. sha1 and sha512 work the same way. |
pbkdf2-sha256$<rounds>$<salt hex>$<digest hex> | PBKDF2 with HMAC SHA-256. pbkdf2-sha512 works the same way. |
pbkdf2-sha256-prepend$<rounds>$<salt hex>$<digest hex> | The variant some products use, where the salt is also prepended to the password before hashing. |
A carried hash is verified at the person's first sign in and replaced by the form SFTP.cloud uses; the person notices nothing.
Size and batch limits
| Where | Limit |
|---|---|
| Portal import | Files up to 16 MiB; accounts created in batches of up to 100 per call. |
| Connector import | Files up to 64 MiB; users granted in batches of 200 per call. |
| Storage locations per Connector | 1024 on a shared server, 8192 on a dedicated server, over the Connector's lifetime. |