Python has some really great libraries for networking. Going from multi-threaded asynchronous services to one-time use cases to more generalized services to run commands over many servers. With several hundred virtualized instances to manage, utilities to deal with some of the more common tasks from the command line become a lot more useful. So, a list of cool libraries I’ve recently looked into:
fabric – A cool python library that abstracts hosts into a single managed list and then allows you to execute commands over the entire host list. Used in Salt (devops) library and uses paramiko under the cover. More on that later. Has a single entry point called a fabfile. Great for developing a set of tasks for a central computer.
paramiko – A library that makes a peer-to-peer ssh connection relatively easy through SSHClient class. The SSHClient class allows you to set up policies for dealing with unknown hosts etc. Connecting is pretty easy, you use a connection method and pass in some basic information about ports, ip address, username and key files. To execute a command, you can then just execute exec_command on the instance and it provides 3 file like objects: stdin, stdout and stderr with typical file reading operations. Great for setting up single remote connections.
sshtunnel – A library for creating ssh tunnels quickly. Provides a class just for port forwarding. Worth checking out if you do this occasionally as it has a quick hand solution. Great for forwarding information, like a database connection.
sockets – A library for doing socket manipulation. Lower level than the other protocols. You have to do things like send/receive from a given socket. Provides a bunch of different protocols you can use. More extensible. Great for dealing with lower level problems or making network more customizable.
socket server – A library that allows you to create a socket server that handles networking events via a handler. A series of mixins and servers are available, including ones that make the handler asynchronous. I used this to implement my own version of port forwarding service. Great for setting up quick server to do connections.
Conch, twisted framework – twisted is a asynchronous network framework in python. It’s pretty cool project and is similar to Tornado. Twisted has a client called conch that allows you to handle ssh traffic. Cool project, but only been through the tutorials. I’m a big fan of the project, but haven’t done that much with it.