Push SFTP

Open-source SFTP command line utility for increasing throughput on latent networks

Introduction

Push SFTP serves as an SFTP command-line client, akin to the standard SFTP command inherent in most major operating systems. In addition to implementing all the standard SFTP commands, Push SFTP introduces the “push” command, designed to enhance transfer performance on networks with high latency.

The push command accelerates the transfer by splitting the file into separate parts and uploading them in parallel over multiple SSH connections. Push SFTP maintains full compatibility with most standard SSH/SFTP servers, including OpenSSH, the most commonly used SSH server.

How does it work?

Jadaptive has extended its Java SSH library’s SFTP client to support the new “push” method of transferring files. The client splits the file into several segments, each uploaded simultaneously via a new connection. Thanks to the SFTP protocol’s support for random access, each part is written back to its original position in the remote file without any need to server-side processing.

Alongside this process, Jadaptive has introduced SFTP extensions for multi-part uploads for file systems without true random access or the ability to write to the same file across multiple connections.

Push SFTP also incorporates file hashing SFTP extensions so that the server can verify the transferred file’s contents for consistency when supported by the server.

What Performance Advantages Can I Expect?

Lab tests have shown a performance boost ranging from x2.5 to x3 in the original ‘put’ command speed of the OpenSSH SFTP command-line client. However, it’s important to note that results may vary across different environments. The ‘push’ command offers several adjustable options; for instance, our tests employed the default chunking size of three parallel uploads.

Performance Tests

Below is the screen captures of the tests performed from the Jadaptive Office in the UK, uploaded to an Amazon EC2 instance in us-east-1. The maximum upload speed supported by our network is 1Gbps.

Figure 1: Standard OpenSSH command line SFTP utility.
Figure 2: The Push upload using the default, three connection configuration.
Figure 3: The Push upload using a modified five connections configuration.

The results will vary across different networks and conditions. Overall the default three connection configuration has worked well in testing across different environments.

Completely Open-source

Push SFTP is a free, open-source, cross-platform solution for Windows, OSX, and Linux under the GPL. It is built using Maverick Synergy, Jadaptive’s open-source Java SSH API.

Push SFTP can seamlessly replace the standard SFTP command, offering full compatibility and, with batching support, can replace existing scripts based on the standard command.

Download

Push SFTP is a cross-platform solution that can be installed on most operating systems.

View Changes


Source Code

If you want to contribute to this project, you should fork the project to your own GitHub account, make your desired changes, and then submit a pull request to us to consider for inclusion in the main project.


Documentation

Introduction
Supported Servers
Push SFTP
Usage
Learning
Network Latency and SFTP