ParallelSSH/parallel-ssh
Asynchronous parallel SSH client library.
30 Releases
Latest: 8mo ago
2.16.0.post1Latest
2.16.0
📋 Changes
- Added ``HostOutput.fully_qualified_command`` for a bytes-string of the fully qualified command executed on that host
2.15.0
📋 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
📋 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
📋 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
2.12.0
📋 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
📋 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
2.11.0.post1
2.11.0
📋 Changes
- Updated minimum required versions for `ssh2-python` and `ssh-python`.
2.10.0
📋 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
📋 Changes
- Even more rare race condition would sometimes cause ``scp_send`` to write incomplete files - #337
2.9.0
📋 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
📋 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
📋 Changes
- ``copy_file`` performance would be abnormally low when copying plain text files - 100x performance increase. Binary
2.7.0
📋 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
2.6.0
📋 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
📋 Changes
- Password authentication via ``pssh.clients.ssh`` would not work - #276
2.5.3
📋 Changes
- Sending files via ``scp_send`` or ``copy_file`` with timeout set could timeout unexpectedly on opening remote file - #271.
2.5.2
📋 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
📋 Changes
- Successful identity file authentication would raise error - #264.
2.5.0
📋 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
📋 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
📋 Changes
- Client output implementation Python 2 support.
2.3.1
📋 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
📋 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
📋 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
