I run a handful of related open source projects, and two of them are merging. Specifically: the Python ‘ssh’ library is merging with Paramiko, of which it was a public fork. The bulk of the work for this merger is already done, and new releases of Paramiko and Fabric (the high level library which has over time used both Paramiko and ‘ssh’) will be out soon.

Implied by the above: I am now the maintainer of Paramiko! Huge thanks to Robey Pointer for creating it & maintaining the project for nearly a decade. I can only hope folks are still using software I wrote ten years out.


Here’s a timeline concerning Fabric’s relationship with Paramiko & ‘ssh’:

  • 2008: Fabric 0.1.x depends on Paramiko 1.7.4 via setup.py. Everything’s fine.
  • Mid 2009: Paramiko 1.7.5 is released, and Paramiko 1.7.4 is removed from PyPI. This is unfortunate, as Paramiko 1.7.5 contains a serious bug causing intermittent crashes.
  • Late 2009: Fabric 0.9.0 releases with a copy of Paramiko 1.7.4 embedded inside its own distribution. This is functional but less than ideal.
  • Even Later in 2009: Paramiko 1.7.6 comes out, fixing the bug from 1.7.5.
  • Mid 2010: Fabric 0.9.2 returns to relying on an external Paramiko installation (i.e. 1.7.6). All is well.
  • Early/Mid 2011: Additional Paramiko-level bugfixes/feature additions become required, but are unable to be integrated upstream due to time constraints. Fabric gets a little antsy.
  • Late 2011: Abovelinked ticket #275 completes, ‘ssh’ is born, and Fabric 1.3 switches dependencies.
  • Early/Mid 2012: The Paramiko maintainer hands off to the ‘ssh’/Fabric maintainer (me). In the meantime, a decent number of improvements and fixes land in ‘ssh’.
  • Now: I finally get off my duff and merge all those changes back into Paramiko. ‘ssh’ is effectively defunct; Paramiko 1.8.0 is basically ready for release.

When’s this coming out?

Very soon. I’ve got a handful more improvements I want to push out for Fabric 1.5, which will switch its packaging dependency back to Paramiko as well. Then I’ll release Fabric 1.5 and Paramiko 1.8 simultaneously, and go from there.

What else is left?

In terms of cleanup that can happen anytime (i.e. not release related):

  • Communication: folks need to know to base work against Paramiko again, not ‘ssh’. As the Paramiko mailing list is defunct and I never set one up for ‘ssh’, this basically means changing the ‘ssh’ repo to have big warning signs on it. Also, this blog post.
  • The remaining open ‘ssh’ tickets need to be ported over to Paramiko’s issue tracker.
    • Also need to review the Paramiko issue tracker to merge any duplicates and get generally familiar with what patches exist.
  • I own paramiko.org but need to set up a new site there. Will probably be using a tweaked copy of this one here. (Ditto for fabfile.org, which currently points to the docs subsite.)
  • Set up a new Paramiko mailing list; thinking of using LibreList.


Forking Paramiko was the right decision at the time, but I handled communication to the Paramiko community itself very poorly (focusing my efforts solely on my Fabric user base). Initially, this was a reluctance to look like I was “poaching” users from Paramiko, but once ownership was unofficially handed to me that excuse evaporated.

I apologize for this – new users coming to the “lower level SSH in Python” space this year had a very confusing situation to deal with, and it’s my fault. Improving communication for all my OSS projects (e.g. a higher rate of posts, using public blogs like this instead of relying solely on mailing lists1, and getting actual webpages published) is now a higher priority for me.

Thanks for reading!

  1. Mailing lists are ultimately less discoverable than a website or blog, and are only becoming moreso as users rely on services like RSS and Twitter. I believe lists still have a place, and will always strive to keep my own lists’ users up to date, but having a blog as the primary information source feels like the sanest move. ↩︎