GitPedia
ParallelSSH

ParallelSSH/parallel-ssh

Asynchronous parallel SSH client library.

30 Releases
Latest: 8mo ago
2.16.0.post1Latest
pkittenispkittenis·8mo ago·October 14, 2025
GitHub
2.16.0
pkittenispkittenis·8mo ago·October 12, 2025
GitHub

📋 Changes

  • Added ``HostOutput.fully_qualified_command`` for a bytes-string of the fully qualified command executed on that host
2.15.0
pkittenispkittenis·8mo ago·October 12, 2025
GitHub

📋 Changes

  • Added compression support for all clients via ``SSHClient(compress=True)``, ``ParallelSSHClient(compress=True)`` and
  • Added "keyboard interactive" login support for native clients. This is fully automated username and password
  • Added ``pssh.exceptions.InvalidAPIUseError`` for errors raised on client initialisation when an invalid API use is
  • Updated minimum ``ssh2-python`` and ``ssh-python`` requirements.
2.14.0
pkittenispkittenis·1y ago·February 2, 2025
GitHub

📋 Changes

  • Handle disconnects better to allow for file descriptor reuse for both clients.
  • Parallel clients no longer forcefully disconnect their clients at de-allocation -
  • ``SSHClient.disconnect`` is now a no-op and deprecated - handled by object de-allocation.
  • ``SSHClient.eagain`` is now a public function - wrapper for polling socket and calling a given socket using function.
  • ``SSHClient.eagain_write`` is now a public function - wrapper for polling socket and calling a given socket using
  • ``SSHClient``, ``TunnelServer`` and ``LocalForwarder`` now use their own gevent pools for greenlets spawned so they
  • ``SSHClient.execute`` is now deprecated in favour of ``SSHClient.run_command``.
  • Forwarder threads used for proxies would not exit gracefully at interpreter shutdown, sometimes causing segfaults.
  • + 3 more
2.13.0
pkittenispkittenis·1y ago·January 13, 2025
GitHub

📋 Changes

  • Minimum version updates for ``ssh2-python`` and ``ssh-python``.
  • Added support for Python 3.12+, removed support for Python <3.8.
  • Package tests under top level ``tests`` directory are now cross platform and may be run by vendors.
  • Calling ``HostOutput.stdin.flush`` with a ``pssh.clients.ssh`` client would raise exception.
2.13.0rc1Pre-release
pkittenispkittenis·1y ago·January 13, 2025
GitHub
2.12.0
pkittenispkittenis·3y ago·August 20, 2022
GitHub

📋 Changes

  • Added ``alias`` optional parameter to ``SSHClient`` and ``HostConfig`` for passing through from parallel clients.
  • Parallel clients now read a common private key only once, reusing it for all clients it applies to,
  • Performance improvements for all clients when reading output.
  • Output reading for all clients has been changed to be less prone to race conditions.
  • Calling ``ParallelSSHClient.join`` without ever running ``run_command`` would raise exception. Is now a no-op.
2.11.1
pkittenispkittenis·3y ago·July 31, 2022
GitHub

📋 Changes

  • Updated default log formatter set by `pssh.utils` enable logger functions.
  • Using native clients under `pssh.clients.native` with very short lived commands would sometimes cause unexpected
2.11.0.post2
pkittenispkittenis·3y ago·July 31, 2022
GitHub
2.11.0.post1
pkittenispkittenis·3y ago·July 31, 2022
GitHub
2.11.0
pkittenispkittenis·3y ago·July 31, 2022
GitHub

📋 Changes

  • Updated minimum required versions for `ssh2-python` and `ssh-python`.
2.10.0
pkittenispkittenis·4y ago·April 1, 2022
GitHub

📋 Changes

  • All client configuration can now be provided via ``HostConfig`` on parallel clients.
  • ``proxy_pkey`` can now also be provided as bytes for proxy authentication from in-memory private key data - #338
  • Removed deprecated since ``2.0.0`` dictionary support for ``host_config`` entries.
2.9.1
pkittenispkittenis·4y ago·March 22, 2022
GitHub

📋 Changes

  • Even more rare race condition would sometimes cause ``scp_send`` to write incomplete files - #337
2.9.0
pkittenispkittenis·4y ago·March 20, 2022
GitHub

📋 Changes

  • ``pssh.exceptions.ConnectionError`` is now the same as built-in ``ConnectionError`` and deprecated - to be removed.
  • Clients now attempt to connect with all addresses in DNS list. In the case where an address refuses connection,
  • Connection actively refused error is no longer subject to retries.
  • ``scp_send`` in native clients would sometimes fail to send all data in a race condition with client going out of scope.
2.8.0
pkittenispkittenis·4y ago·November 28, 2021
GitHub

📋 Changes

  • All clients now support private key data as bytes in ``pkey`` parameter for authentication from in-memory private key
  • Parallel clients now read a provided private key path only once and use in-memory data for authentication to avoid
2.7.1
pkittenispkittenis·4y ago·November 27, 2021
GitHub

📋 Changes

  • ``copy_file`` performance would be abnormally low when copying plain text files - 100x performance increase. Binary
2.7.0
pkittenispkittenis·4y ago·October 31, 2021
GitHub

📋 Changes

  • All clients now support IPv6 addresses for both DNS and IP entries in host list - #291
  • Added ``ipv6_only`` flag to ``ParallelSSHClient`` and ``SSHClient`` for choosing only IPv6 addresses when both v4 and
  • Removed Python 2 from binary wheel compatibility as it is no longer supported and not guaranteed to work.
  • Host name is now an argument for all exceptions raised by single clients.
  • ``HostOutput`` would have empty host on some exceptions when ``stop_on_errors`` is ``False`` - #297
  • Race condition when forcefully closing channel via ``SSHClient.close_channel`` while channel data was left unread.
2.6.0post1
pkittenispkittenis·4y ago·August 26, 2021
GitHub
2.6.0
pkittenispkittenis·4y ago·August 26, 2021
GitHub

📋 Changes

  • ``user`` keyword argument no longer required on Windows - exception is raised if user cannot be identified.
  • Removed deprecated since ``2.0.0`` functions and parameters.
  • ``copy_remote_file`` with recurse enabled would not use a provided encoding for sub-directories - #284
  • Reconnecting to the same proxy host when proxy is configured would sometimes cause segfauls - ##304
2.5.4
pkittenispkittenis·5y ago·January 28, 2021
GitHub

📋 Changes

  • Password authentication via ``pssh.clients.ssh`` would not work - #276
2.5.3
pkittenispkittenis·5y ago·January 9, 2021
GitHub

📋 Changes

  • Sending files via ``scp_send`` or ``copy_file`` with timeout set could timeout unexpectedly on opening remote file - #271.
2.5.2
pkittenispkittenis·5y ago·January 6, 2021
GitHub

📋 Changes

  • Agent authentication would not work for the libssh clients under ``pssh.clients.ssh`` - #267.
  • Password authentication would be attempted if all other methods failed even when no password was provided.
  • Gevent minimum version was too low - #269.
2.5.1
pkittenispkittenis·5y ago·January 4, 2021
GitHub

📋 Changes

  • Successful identity file authentication would raise error - #264.
2.5.0
pkittenispkittenis·5y ago·January 2, 2021
GitHub

📋 Changes

  • Python 2 no longer supported.
  • Updated class arguments, refactor for ``pssh.clients.native.tunnel``.
  • Closed clients with proxy host enabled would not shutdown their proxy servers.
  • Clients with proxy host enabled would not disconnect the proxy client on ``.disconnect`` being called.
  • Default identity files would not be used when private key was not specified - #222.
  • ``ParallelSSHClient(<..>, identity_auth=False)`` would not be honoured.
2.4.0
pkittenispkittenis·5y ago·December 26, 2020
GitHub

📋 Changes

  • Added interactive shell support to single and parallel clients - see [documentation](https://parallel-ssh.readthedocs.io/en/latest/advanced.html#interactive-shells).
  • Added ``pssh.utils.enable_debug_logger`` function.
  • ``ParallelSSHClient`` timeout parameter is now also applied to *starting* remote commands via ``run_command``.
  • ``HostOutput.stdin`` now handles EAGAIN automatically when writing - #165.
  • Assigning to ``ParallelSSHClient.hosts`` cleans up clients of hosts no longer in host list - #220.
  • ``SSHClient`` with proxy enabled could not be used without setting port - #248
  • Encoding would not be applied to command string on ``run_command`` and interactive shells, `utf-8` used instead - #174.
2.3.2
pkittenispkittenis·5y ago·December 9, 2020
GitHub

📋 Changes

  • Client output implementation Python 2 support.
2.3.1
pkittenispkittenis·5y ago·December 6, 2020
GitHub

📋 Changes

  • ``SSHClient.read_output`` and ``read_stderr`` now take buffer to read from as argument instead of channel.
  • ``SSHClient.wait_finished`` now takes ``HostOutput`` argument instead of channel.
  • Output for multiple commands on one host run at the same time would be lost.
2.3.0
pkittenispkittenis·5y ago·December 4, 2020
GitHub

📋 Changes

  • ``SSHClient`` now starts buffering output from remote host, both standard output and standard error, when a command is run.
  • ``SSHClient.read_output``, ``SSHClient.read_stderr`` and iterating on stdout/stderr from ``HostOutput`` now read from the internal buffer rather than the SSH channel directly.
  • ``ParallelSSHClient.join`` no longer requires ``consume_output`` to be set in order to get exit codes without first reading output.
  • ``ParallelSSHClient.join`` with timeout no longer consumes output by default. It is now possible to use ``join`` with a timeout and capture output after ``join`` completes.
  • ``ParallelSSHClient.reset_output_generators`` is now a no-op and no longer required to be called after timeouts.
  • ``HostOutput.stdout`` and ``stderr`` are now dynamic properties.
  • Added ``HostOutput.read_timeout`` attribute. Can be used to see what read timeout was when ``run_command`` was called and to change timeout when next reading from ``HostOutput.stdout`` and ``stderr``.
  • Added ``HostOutput.encoding`` attribute for encoding used when ``run_command`` was called. Encoding can now be changed for when next reading output.
  • + 5 more
2.2.0
pkittenispkittenis·5y ago·December 1, 2020
GitHub

📋 Changes

  • New single host tunneling, SSH proxy, implementation for increased performance.
  • Native ``SSHClient`` now accepts ``proxy_host``, ``proxy_port`` and associated parameters - see [API documentation](https://parallel-ssh.readthedocs.io/en/latest/config.html)
  • Proxy configuration can now be provided via ``HostConfig``.
  • Added ``ParallelSSHClient.connect_auth`` function for connecting and authenticating to hosts in parallel.
2.1.0post1
pkittenispkittenis·5y ago·October 25, 2020
GitHub