Getting Started

SFTP Server is a simple, secure file transfer server based on atmoz/sftp, which wraps OpenSSH in a minimal Docker image. It creates chroot-jailed user accounts that can upload and download files over SFTP from any standard client — FileZilla, sftp, WinSCP, or any programming language with an SSH library. Available as an open web service in Eyevinn Open Source Cloud, the SFTP Server is a good fit for secure file drops, automated upload pipelines, and application-to-application file transfer.

Prerequisites

Step 1: Create an SFTP Server instance

Navigate to the SFTP Server service in the Eyevinn OSC web console. Click Create sftp and fill in:

Field Description Example
Name Short alphanumeric name for your instance mysftp
Username Login name for the SFTP user upload
Password Password for the SFTP user s3cr3t

Click Create and wait for the status indicator to turn green and show running.

Security note: Change the default password to something strong before sharing connection details with clients. SFTP traffic is encrypted by SSH, but a weak password is still a risk.

Step 2: Connect via SFTP

Once the instance is running, click it to reveal the host and port. Connect with any SFTP client:

sftp -P <PORT> <username>@<host>

For example:

sftp -P 10522 upload@mysftp-atmoz-sftp.auto.prod.osaas.io

Enter the password when prompted. You land in the user's home directory at /home/<username>/upload/.

FileZilla

In FileZilla, enter:

  • Host: sftp://<host>
  • Port: the assigned port
  • Username and Password from Step 1
  • Protocol: SFTP – SSH File Transfer Protocol

Node.js (ssh2-sftp-client)

import SftpClient from 'ssh2-sftp-client';

const sftp = new SftpClient();
await sftp.connect({
  host: '<host>',
  port: <PORT>,
  username: '<username>',
  password: '<password>'
});

// Upload a file
await sftp.put('./local-file.csv', '/upload/remote-file.csv');

// List files
const list = await sftp.list('/upload/');
console.log(list);

await sftp.end();

Python (paramiko)

import paramiko

transport = paramiko.Transport(('<host>', <PORT>))
transport.connect(username='<username>', password='<password>')
sftp = paramiko.SFTPClient.from_transport(transport)

# Upload
sftp.put('local-file.csv', '/upload/remote-file.csv')

# Download
sftp.get('/upload/remote-file.csv', 'downloaded.csv')

sftp.close()
transport.close()

CLI usage

osc create atmoz-sftp mysftp \
  -o Username="upload" \
  -o Password="s3cr3t"

Resources