Skip to main content

Asynchronous parallel SSH library

Project description

Asynchronous parallel SSH client library.

Run SSH commands over many - hundreds/hundreds of thousands - number of servers asynchronously and with minimal system load on the client host.

Native code based client with extremely high performance - based on libssh2 C library.

License Latest Version https://travis-ci.org/ParallelSSH/parallel-ssh.svg?branch=master https://ci.appveyor.com/api/projects/status/github/parallelssh/parallel-ssh?svg=true&branch=master https://codecov.io/gh/ParallelSSH/parallel-ssh/branch/master/graph/badge.svg https://img.shields.io/pypi/wheel/parallel-ssh.svg Latest documentation

Installation

pip install parallel-ssh

Usage Example

See documentation on read the docs for more complete examples.

Run uname on two remote hosts in parallel.

from pssh.clients import ParallelSSHClient

hosts = ['localhost', 'localhost']
client = ParallelSSHClient(hosts)

output = client.run_command('uname', return_list=True)
for host_output in output:
    for line in host_output.stdout:
        print(line)
Output:
Linux
Linux

Native client

Starting from version 1.2.0, the default client in parallel-ssh has changed to the native clint which offers much greater performance and reduced overhead than the current default client.

The new default client is based on libssh2 via the ssh2-python extension library and supports non-blocking mode natively. Binary wheel packages with libssh2 included are provided for Linux, OSX and Windows platforms and all supported Python versions.

See this post for a performance comparison of the available clients.

The paramiko based client under pssh.clients.miko and the old pssh.pssh_client imports will be removed on the release of 2.0.0.

Default client:

from pssh.clients import ParallelSSHClient

hosts = ['localhost', 'localhost']
client = ParallelSSHClient(hosts)

output = client.run_command('uname')
for host, host_output in output.items():
    for line in host_output.stdout:
        print(line)

See documentation for a feature comparison of the two clients.

Native Code Client Features

  • Highest performance and least overhead of any Python SSH library

  • Thread safe - makes use of native threads for CPU bound calls like authentication

  • Natively non-blocking utilising libssh2 via ssh2-python - no monkey patching of the Python standard library

  • Significantly reduced overhead in CPU and memory usage

Exit codes

Once either standard output is iterated on to completion, or client.join(output, consume_output=True) is called, exit codes become available in host output.

Iteration ends only when remote command has completed, though it may be interrupted and resumed at any point.

HostOutput.exit_code is a dynamic property and will return None when exit code is not ready, meaning command has not finished, or channel is unavailable due to error.

Once all output has been gathered exit codes become available even without calling join.

output = client.run_command('uname', return_list=True)
for host_out in output:
    for line in host_out.stdout:
        print(line)
    print(host_out.exit_code)
Output:
Linux
0
Linux
0

The client’s join function can be used to wait for all commands in output object to finish.

After join returns, commands have finished and output can be read.

client.join(output)

for host_out in output:
    for line in host_output.stdout:
        print(line)
    print(host_out.exit_code)

Similarly, exit codes are available after client.join(output, consume_output=True).

consume_output flag must be set to get exit codes when not reading from stdout. Future releases aim to remove the need for consume_output to be set.

output = client.run_command('uname')

# Wait for commands to complete and consume output so can get exit codes
client.join(output, consume_output=True)

for host_output in output:
    print(host_out.exit_code)
Output:
0
0

There is also a built in host logger that can be enabled to log output from remote hosts. The helper function pssh.utils.enable_host_logger will enable host logging to stdout.

To log output without having to iterate over output generators, the consume_output flag must be enabled - for example:

from pssh.utils import enable_host_logger

enable_host_logger()
output = client.run_command('uname')
client.join(output, consume_output=True)
Output:
[localhost]       Linux

SCP

SCP is supported - native clients only - and provides the best performance for file copying.

Unlike with the SFTP functionality, remote files that already exist are not overwritten and an exception is raised instead.

Note that enabling recursion with SCP requires server SFTP support for creating remote directories.

To copy a local file to remote hosts in parallel with SCP:

from pssh.clients import ParallelSSHClient
from gevent import joinall

hosts = ['myhost1', 'myhost2']
client = ParallelSSHClient(hosts)
cmds = client.scp_send('../test', 'test_dir/test')
joinall(cmds, raise_error=True)

See also documentation for SCP recv.

SFTP

SFTP is supported natively. Performance is much slower than SCP due to underlying library limitations and SCP should be preferred where possible. In the case of the deprecated paramiko clients, several bugs exist with SFTP performance and behaviour - avoid if at all possible.

To copy a local file to remote hosts in parallel:

from pssh.clients import ParallelSSHClient
from pssh.utils import enable_logger, logger
from gevent import joinall

enable_logger(logger)
hosts = ['myhost1', 'myhost2']
client = ParallelSSHClient(hosts)
cmds = client.copy_file('../test', 'test_dir/test')
joinall(cmds, raise_error=True)
Output:
Copied local file ../test to remote destination myhost1:test_dir/test
Copied local file ../test to remote destination myhost2:test_dir/test

There is similar capability to copy remote files to local ones suffixed with the host’s name with the copy_remote_file function.

Directory recursion is supported in both cases via the recurse parameter - defaults to off.

See SFTP documentation for more examples.

Design And Goals

parallel-ssh’s design goals and motivation are to provide a library for running non-blocking asynchronous SSH commands in parallel with little to no load induced on the system by doing so with the intended usage being completely programmatic and non-interactive.

To meet these goals, API driven solutions are preferred first and foremost. This frees up developers to drive the library via any method desired, be that environment variables, CI driven tasks, command line tools, existing OpenSSH or new configuration files, from within an application et al.

Comparison With Alternatives

There are not many alternatives for SSH libraries in Python. Of the few that do exist, here is how they compare with parallel-ssh.

As always, it is best to use a tool that is suited to the task at hand. parallel-ssh is a library for programmatic and non-interactive use - see Design And Goals. If requirements do not match what it provides then it best not be used. Same applies for the tools described below.

Paramiko

The default SSH client library in parallel-ssh <=``1.6.x`` series.

Pure Python code, while having native extensions as dependencies, with poor performance and numerous bugs compared to both OpenSSH binaries and the libssh2 based native clients in parallel-ssh 1.2.x and above. Recent versions have regressed in performance and have blocker issues.

It does not support non-blocking mode, so to make it non-blocking monkey patching must be used which affects all other uses of the Python standard library. However, some functionality like Kerberos (GSS-API) authentication is not currently provided by other libraries.

asyncssh

Python 3 only asyncio framework using client library. License (EPL) is not compatible with GPL, BSD or other open source licenses and combined works cannot be distributed.

Therefore unsuitable for use in many projects, including parallel-ssh.

Fabric

Port of Capistrano from Ruby to Python. Intended for command line use and is heavily systems administration oriented rather than non-interactive library. Same maintainer as Paramiko.

Uses Paramiko and suffers from the same limitations. More over, uses threads for parallelisation, while not being thread safe, and exhibits very poor performance and extremely high CPU usage even for limited number of hosts - 1 to 10 - with scaling limited to one core.

Library API is non-standard, poorly documented and with numerous issues as API use is not intended.

Ansible

A configuration management and automation tool that makes use of SSH remote commands. Uses, in parts, both Paramiko and OpenSSH binaries.

Similarly to Fabric, uses threads for parallelisation and suffers from the poor scaling that this model offers.

See The State of Python SSH Libraries for what to expect from scaling SSH with threads, as compared to non-blocking I/O with parallel-ssh.

Again similar to Fabric, its intended and documented use is interactive via command line rather than library API based. It may, however, be an option if Ansible is already being used for automation purposes with existing playbooks, the number of hosts is small, and when the use case is interactive via command line.

parallel-ssh is, on the other hand, a suitable option for Ansible as an SSH client that would improve its parallel SSH performance significantly.

ssh2-python

Wrapper to libssh2 C library. Used by parallel-ssh as of 1.2.0 and is by same author.

Does not do parallelisation out of the box but can be made parallel via Python’s threading library relatively easily and as it is a wrapper to a native library that releases Python’s GIL, can scale to multiple cores.

parallel-ssh uses ssh2-python in its native non-blocking mode with event loop and co-operative sockets provided by gevent for an extremely high performance library without the side-effects of monkey patching - see benchmarks.

In addition, parallel-ssh uses native threads to offload CPU blocked tasks like authentication in order to scale to multiple cores while still remaining non-blocking for network I/O.

pssh.clients.native.SSHClient is a single host natively non-blocking client for users that do not need parallel capabilities but still want a non-blocking client with native code performance.

Out of all the available Python SSH libraries, libssh2 and ssh2-python have been shown, see benchmarks above, to perform the best with the least resource utilisation and ironically for a native code extension the least amount of dependencies. Only libssh2 C library and its dependencies which are included in binary wheels.

However, it lacks support for some SSH features present elsewhere like ECDSA keys (PR pending), agent forwarding (PR also pending) and Kerberos authentication - see feature comparison.

Scaling

Some guide lines on scaling parallel-ssh and pool size numbers.

In general, long lived commands with little or no output gathering will scale better. Pool sizes in the multiple thousands have been used successfully with little CPU overhead in the single thread running them in these use cases.

Conversely, many short lived commands with output gathering will not scale as well. In this use case, smaller pool sizes in the hundreds are likely to perform better with regards to CPU overhead in the event loop.

Multiple Python native threads, each of which can get its own event loop, may be used to scale this use case further as number of CPU cores allows. Note that parallel-ssh imports must be done within the target function of the newly started thread for it to receive its own event loop. gevent.get_hub() may be used to confirm that the worker thread event loop differs from the main thread.

Gathering is highlighted here as output generation does not affect scaling. Only when output is gathered either over multiple still running commands, or while more commands are being triggered, is overhead increased.

Technical Details

To understand why this is, consider that in co-operative multi tasking, which is being used in this project via the gevent library, a co-routine (greenlet) needs to yield the event loop to allow others to execute - co-operation. When one co-routine is constantly grabbing the event loop in order to gather output, or when co-routines are constantly trying to start new short-lived commands, it causes contention with other co-routines that also want to use the event loop.

This manifests itself as increased CPU usage in the process running the event loop and reduced performance with regards to scaling improvements from increasing pool size.

On the other end of the spectrum, long lived remote commands that generate no output only need the event loop at the start, when they are establishing connections, and at the end, when they are finished and need to gather exit codes, which results in practically zero CPU overhead at any time other than start or end of command execution.

Output generation is done remotely and has no effect on the event loop until output is gathered - output buffers are iterated on. Only at that point does the event loop need to be held.

User’s group

There is a public ParallelSSH Google group setup for this purpose - both posting and viewing are open to the public.

https://ga-beacon.appspot.com/UA-9132694-7/parallel-ssh/README.rst?pixel

Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

parallel-ssh-1.12.1.tar.gz (133.4 kB view details)

Uploaded Source

Built Distributions

parallel_ssh-1.12.1-cp39-cp39-manylinux2010_x86_64.whl (293.3 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

parallel_ssh-1.12.1-cp39-cp39-manylinux1_x86_64.whl (293.3 kB view details)

Uploaded CPython 3.9

parallel_ssh-1.12.1-cp38-cp38-win_amd64.whl (125.5 kB view details)

Uploaded CPython 3.8 Windows x86-64

parallel_ssh-1.12.1-cp38-cp38-manylinux2010_x86_64.whl (303.4 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

parallel_ssh-1.12.1-cp38-cp38-manylinux1_x86_64.whl (303.4 kB view details)

Uploaded CPython 3.8

parallel_ssh-1.12.1-cp38-cp38-macosx_10_15_x86_64.whl (129.4 kB view details)

Uploaded CPython 3.8 macOS 10.15+ x86-64

parallel_ssh-1.12.1-cp37-cp37m-win_amd64.whl (123.9 kB view details)

Uploaded CPython 3.7m Windows x86-64

parallel_ssh-1.12.1-cp37-cp37m-manylinux2010_x86_64.whl (256.8 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

parallel_ssh-1.12.1-cp37-cp37m-manylinux1_x86_64.whl (256.8 kB view details)

Uploaded CPython 3.7m

parallel_ssh-1.12.1-cp37-cp37m-macosx_10_14_x86_64.whl (128.8 kB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

parallel_ssh-1.12.1-cp36-cp36m-win_amd64.whl (124.0 kB view details)

Uploaded CPython 3.6m Windows x86-64

parallel_ssh-1.12.1-cp36-cp36m-manylinux2010_x86_64.whl (255.6 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64

parallel_ssh-1.12.1-cp36-cp36m-manylinux1_x86_64.whl (255.6 kB view details)

Uploaded CPython 3.6m

parallel_ssh-1.12.1-cp35-cp35m-manylinux2010_x86_64.whl (257.0 kB view details)

Uploaded CPython 3.5m manylinux: glibc 2.12+ x86-64

parallel_ssh-1.12.1-cp35-cp35m-manylinux1_x86_64.whl (257.0 kB view details)

Uploaded CPython 3.5m

parallel_ssh-1.12.1-cp27-cp27mu-manylinux2010_x86_64.whl (235.1 kB view details)

Uploaded CPython 2.7mu manylinux: glibc 2.12+ x86-64

parallel_ssh-1.12.1-cp27-cp27mu-manylinux1_x86_64.whl (235.1 kB view details)

Uploaded CPython 2.7mu

parallel_ssh-1.12.1-cp27-cp27m-manylinux2010_x86_64.whl (235.1 kB view details)

Uploaded CPython 2.7m manylinux: glibc 2.12+ x86-64

parallel_ssh-1.12.1-cp27-cp27m-manylinux1_x86_64.whl (235.1 kB view details)

Uploaded CPython 2.7m

File details

Details for the file parallel-ssh-1.12.1.tar.gz.

File metadata

  • Download URL: parallel-ssh-1.12.1.tar.gz
  • Upload date:
  • Size: 133.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel-ssh-1.12.1.tar.gz
Algorithm Hash digest
SHA256 077dad54342839ced6688f5c9afc1b07c214839686dc6f8ca730dedfd89c8a52
MD5 730da78eb3f026ccc36d31467f19214a
BLAKE2b-256 e9c07bd54b1ee3ad97d51fda657a746a01a7b3240d5c0997fd242a94e43a234c

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp39-cp39-manylinux2010_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp39-cp39-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 293.3 kB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp39-cp39-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 bd49661fa383776f057150d260f7e24132486105fa0a301a3ee23fe7602a8ffd
MD5 5c488718710240d97ae6f08364fe4ba2
BLAKE2b-256 70ba1a83133f039526c3037e26ed5195310211534c34ed22f06fa92c251610ba

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp39-cp39-manylinux1_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp39-cp39-manylinux1_x86_64.whl
  • Upload date:
  • Size: 293.3 kB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp39-cp39-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 46d24be5f360ee73fc48c66a67f5e46177cb65fbe8da84f7b934bc4fba3d1e21
MD5 7e29d0e870fdf15e23af01a3a87cb6e9
BLAKE2b-256 52c482b178d06d3b87d90de6912602561108aa13e387dfb50cd0271541e0bf12

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 125.5 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.0

File hashes

Hashes for parallel_ssh-1.12.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 faf774c937485fd593f646f908cdf0827c5083e5e017e1001f3d18f519607fae
MD5 cd6b7997ab10b94ba0a439e8ba0ca169
BLAKE2b-256 aeb980e0d9a0b6e13a3709f3f0fc9c532b77f500f8d5fd134a5825c2fe4cd824

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 303.4 kB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 c16f8a526317b2fad6266580ea8521bd6d42e4e408908fac2e295287a7dc9a8f
MD5 1d39456fdcb23cea218006a5235656c2
BLAKE2b-256 8c304a3c8b61f901b2bad16afa91fbedc5a8bc531dcfe48c19491dbcf208afac

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 303.4 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 59aea4b6d15966c63b85a47dcb6a8179921cff8b8ac2317d5888e071a3d2b5f2
MD5 e6d0fa701e61083e7823f906807f1a8b
BLAKE2b-256 6691b0085882b32db24c2133893495ae43b56b753889f120c1b74018106a79cf

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp38-cp38-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp38-cp38-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 129.4 kB
  • Tags: CPython 3.8, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/2.7.17

File hashes

Hashes for parallel_ssh-1.12.1-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 26ad47abace5f9fc6c926913c723d1f032204ad53d8da4ab7a9813f25f4017bf
MD5 ad82f9e399520674b18101c4a40b0cf2
BLAKE2b-256 77189df93879d8be56acd8f306435c4aab1914fa54df20f5ee426011dbe714b7

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 123.9 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.5

File hashes

Hashes for parallel_ssh-1.12.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 09d19b9bda3769fda47b0be543d348b513a8730aec53fbfb7aa08b86386432ba
MD5 50e95754d899fbb2fc21096a85e643e8
BLAKE2b-256 fea7c056ae1bd43f6e44cc5a6aa5b2dbcdec5f86bd7afac168559174b8b579b7

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 256.8 kB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 28beb1ef1da4cf0b877c6420215641d228baee65110d301424999f997c1d6b47
MD5 d799c6a133fc8260ab33a3fed97134da
BLAKE2b-256 717ed70362eb71e19eb419923f4cc85ac8ffad28eb9735ed243ea31034bb1ad7

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 256.8 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 f3ea159227a7672374f17a609138f5ca604f0ec19ae607162a6ac78f72b70089
MD5 c68518ad6934f6b39584656294f9d019
BLAKE2b-256 0d7157f42588be8da2aa6338356140fca31ef6d3f53e1da23442030b0a26bff1

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp37-cp37m-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp37-cp37m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 128.8 kB
  • Tags: CPython 3.7m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/2.7.17

File hashes

Hashes for parallel_ssh-1.12.1-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 acca6e1d506fe5fd9052a1cc8159ffcde78c654fc460bb17639215bc3abd449b
MD5 7a63ad9a1642569bd85e4dd9a75fc5b3
BLAKE2b-256 5e7592d226dcf785b06c70f49a7ed93f4c46210b0c98bca714cece91e777d004

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 124.0 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.8

File hashes

Hashes for parallel_ssh-1.12.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 40c148fbb81b98d3f5841bac0a944cbd6eab381b7b253684d8b9492a91606910
MD5 3e7c40dfacab0aa2e4e362c25e1d3a1e
BLAKE2b-256 36f1d29d82e25e926d1d6b1b9be7be9ad239b461ee7281ba820b326d076e56ce

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 255.6 kB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 fd1e8b79da148ec08861dbfa9121e2fdcceb05488e5339488fc9652b45d61463
MD5 2bfff44e9b83e62f522a0e3233629256
BLAKE2b-256 d51898dd2f485067bb2f549456858866219321197809193506c61e4b320df524

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 255.6 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 fe03890b5d275bc22d4bcc4e4667425b287362965163203738de4a95fdd28c20
MD5 4446599eeaea680b1c3dd8258b633db8
BLAKE2b-256 1172db84767cddfebcc80641434ee7dd16ac681b64d5cde7f5b32cf3b2d83686

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp35-cp35m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp35-cp35m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 257.0 kB
  • Tags: CPython 3.5m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 98cd7aa5d8cbad64c93539034bbeeda372b8909368964fdbd7872dc7ae11f5b7
MD5 de72038fb149a5b013a8c1051da76984
BLAKE2b-256 feb8c309a166de995f9cfa6ecadac467f7d74e9a902eb5f3166d51fc9baa5c7e

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 257.0 kB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 66eb442fbc2d0a678f7e163265f9e12a80c43b6c67321ab1ed682a0125022493
MD5 25f7390c37021b087bf6fbccfa5394b9
BLAKE2b-256 0a46ac7c93b2900c16536ea058b899b688a80225a35332defe352f6371b2dd8d

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp27-cp27mu-manylinux2010_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp27-cp27mu-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 235.1 kB
  • Tags: CPython 2.7mu, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp27-cp27mu-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 4ea06358230d572e475bc18bd02345cbeea55c2bdafd6bbcdcc675c493c34d7b
MD5 59ee0aed198b41f6fe9236af3db8416b
BLAKE2b-256 6c4ab6defa38f0e8fb1804974bcad377989d288a51325f7c7e5c684caf0a61f6

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp27-cp27mu-manylinux1_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp27-cp27mu-manylinux1_x86_64.whl
  • Upload date:
  • Size: 235.1 kB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 43afde3b39a3e502c888dd3e4f37355561d895a442f0c563b696b84c0d339dcb
MD5 b29c8746f167c3e3e9d6628097fe2faf
BLAKE2b-256 2d3c06c8fce13b41ba67c6d40847157b6c258ca6305f9064cf1bb1447a6e472a

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp27-cp27m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp27-cp27m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 235.1 kB
  • Tags: CPython 2.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp27-cp27m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 3042a04256782a279512d832f80fab96cb928903459028a53a2505fc2398cf77
MD5 03bccddcef846098741436aeb80c1927
BLAKE2b-256 d144cf8d71e0eb8993cc5a8a57678406d8966937f8ff0e61eb12c52333ba1d83

See more details on using hashes here.

File details

Details for the file parallel_ssh-1.12.1-cp27-cp27m-manylinux1_x86_64.whl.

File metadata

  • Download URL: parallel_ssh-1.12.1-cp27-cp27m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 235.1 kB
  • Tags: CPython 2.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.6.7

File hashes

Hashes for parallel_ssh-1.12.1-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 51baba149df28ddcffc71813953bab6789834ef5667131f5de81411e3949e08a
MD5 2549fdad8ca6569490df9d8b72b02e2d
BLAKE2b-256 fdb4de3204b54d06369450f6f4fa0ce7aa9e27dcde3fdcfd620df042dfbaae60

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page