ffsend: Secure File Share From The Command Line (Firefox Send Client)

ffsend command line Firefox Send client

ffsend is a command line Firefox Send client that's currently in alpha, available for Linux, macOS and Windows (with only macOS and Linux binaries being available right now).

With ffsend you can easily and securely share files from the command line, by making use of a Send, a Firefox test pilot project.

Firefox Send is a file sharing experiment by Mozilla, which allows sending encrypted files to other users. 'Send' can be installed on your own server, or you can use the Mozilla-hosted send.firefox.com. The latter officially supports files up to 1 GB (but I could upload a 2GB file, as mentioned by the ffsend description), with each link expiring after a configurable download count (defaulting to 1 download) or 24 hours, while also deleting all the files from the Send server. Read more about the Send Firefox Test Pilot.

ffsend can both upload and download files, while the remote host can use either ffsend or a simple web browser (that doesn't have to be Firefox) to download the file.

One could always use the send.firefox.com web interface to upload and download files, but ffsend is intended for usage in scripts, without interaction. You can also use it for a quick file upload or download that doesn't require opening a web browser.

While ffsend uses client-side encryption, ensuring that all files are encrypted before they are uploaded to the remote host, anyone with the link can download the file, so make sure you don't share it with unauthorized people. That's because the encryption secret, which is used to decrypt the file when downloading it, is included in the share URL.

An extra level of protection is available - you can password protect the file by appending --password when uploading a file using ffsend, or by setting the password after a file was uploaded, by using ffsend password URL -p YOUR-PASSWORD.

ffsend features:

  • Upload and download files and directories. For directories, ffsend will offer to archive the contents before uploading it.
  • Can be used with send.firefox.com (this is the default) or with your own Send host
  • Client side encryption
  • Configurable download limits (allows the file to be downloaded between 1 and 20 times)
  • Password protection
  • Built-in archiving and extracting
  • History tracking of files for easy management
  • Inspect or delete shared files

Downloading and using ffsend

While ffsend supports Linux, macOS and Windows, there are only macOS and Linux binaries for download right now. For Debian, Ubuntu, Linux Mint and other DEB-based Linux distributions, all you have to do is download and install the ffsend DEB package.

On other Linux distributions, like Fedora, etc., you can download the generic binary. For 64bit (most users), download the ffsend binary ending in -linux-x64.tar.gz, extract it and install it somewhere in your $PATH, like /usr/local/bin. Let's say you've extracted the .tar.gz in the current folder - in this case you can install the ffsend binary in /usr/local/bin using this command:

sudo install ffsend /usr/local/bin/

Now you can upload a file like this:

ffsend upload <file.ext>

Replace file.ext with the file you want to upload.

Want to download a file using ffsend? It's just as easy:

ffsend download <URL>

ffsend defaults to allowing 1 download per shared file, after which the file is deleted from the servers. To change this, use --downloads NN (where NN is a number from 1 to 20) when uploading a file:

ffsend upload --downloads <NN> <file.ext>

You can also change the number of allowed downloads for already uploaded files. To be able to do this, you must know the URL of the file you want to modify. You can see all shared URLs using:

ffsend history

Here's how the output looks like:

$ ffsend history
#  LINK                                                                  EXPIRY  
1  https://send.firefox.com/download/e84e67e23c/#DYyvhlM9h1x1TAC9lJNUbw  23h59m  
2  https://send.firefox.com/download/c7fa183352/#j90VHhSrcpx_2Xlb-LGeXg  5h20m  
3  https://send.firefox.com/download/65716755f4/#wQaXbCgC2HOXvLrJVFc-Lw  4h58m  
4  https://send.firefox.com/download/4fbd102676/#LocbOt6LEs-sQFG6CKPeLw  4h54m  
5  https://send.firefox.com/download/fbe2a90d5b/#fJJ8NKsoJq0RRTRMSD3cVQ  3h6m

As you can see, command only lists the URLs and their expiry times, but not the file names. You can use the info command for more detailed information on an URL, like this:

ffsend info <URL>

Here's with output:

$ ffsend info https://send.firefox.com/download/4fbd102676/#LocbOt6LEs-sQFG6CKPeLw
ID:         4fbd102676  
Name:       Fedora-Workstation-Live-x86_64-29-1.2.iso  
Size:       1.80 GiB (1931477008 B)  
MIME:       application/octet-stream  
Downloads:  0 of 1  
Expiry:     4h53m (17613s)

Once you know the URL, you can change the allowed number of downloads until the link expires, by using this command:

ffsend parameters --download-limit <NN> <URL>

NN being the number of allowed downloads before the link expires (between 1 and 20), and URL the Send URL.

Fore more on ffsend, see its README and check out ffsend --help.