Secure File Syncing

This is a follow up to my previous post Single Point of Failure, where I detailed my switch to self-hosted/distributed alternatives to various Google services so I wasn't completely reliant on one provider. At the time I didn't cover file syncing, since Dropbox was doing a fine job for me. However, for a couple of reasons, one being that the Dropbox Linux client is significantly slowing down my system, I've decided to move to a different tool. Conveniently, with the recent NSA Prism revelations, secure distributed alternatives to tools like Dropbox have been enjoying a lot of exposure, so it's been easy to find good alternatives.

The two tools that I'm now using are:

  1. Git Annex + Git Annex Assistant
  2. BitTorrent Sync

Both are really promising, but for different reasons.

Git Annex

Git Annex offers the ability to distribute files across many locations and uses Git to keep track of the location(s) any given file is available from. It also gives you the ability to recall a file from a remote location to your current device. This is really powerful for managing a large amount of data when you don't have room for it all on one machine.

The assistant functionality automates the syncing between repositories. It has a nice webapp which provides a GUI for managing remotes and sync strategies. These remotes can be additional git repositories, encrypted rsync destinations, local drives, EC2, and more. The assistant is still under active development, so it's not 100% stable or feature-complete, but it's definitely usable and the underlying functionality is pretty solid.

At the time of writing (July 20th) there's a crowd-funding campaign going on to support another year of full time development on git annex. If you want to support a good open source project, head ond over and contribute a few bucks (or bitcoins.)

BitTorrent Sync

BitTorrent Sync is the second tool I'm using for file syncing. It's much less complex then Git Annex. It's all about keeping folders in sync across multiple systems. The setup is pretty simple:

  1. Add a folder to the client and generate a unique secret key.
  2. From any other computer, choose a folder and give it the secret key.
  3. Let the computers auto-discover each other, or specify an address.

BitTorrent Sync has clients for all the major desktop operating systems and an Android app.

What to use?

For the time being, I'm going to use both. I'm trying out Git Annex as a central store for anything I care about. Using it, I can setup a backup with the encrypted rsync remote as well as directly sync when I need to my different computers on an as-needed basis. This allows me to track all my old projects and miscellany in a single place.

BitTorrent Sync is going to handle more transient syncing needs. This includes things like my workspace and desktop wallpaper collection since they're ever changing and could be rebuilt from scratch if really necessary.

Web Access

In addition to the two syncing services listed above, I also have ajaxplorer setup on a remote VM and pointed at a BitTorrent Sync folder setup on the VM. This allows me to make files available when I'm on the road, at work or don't have access to a trusted machine with the client installed.

Further Reading