📝 Release notes
📦 PyPI page: https://pypi.org/project/ansible-pylibssh/1.4.0
🌱 v1.4.0 is marked as a stable release.
🔗 This release has been produced by the following workflow run: https://github.com/ansible/pylibssh/actions/runs/23120213721
v1.4.0
(2026-03-15)
Bug fixes
-
Fixed the log level mapping to cover the entire
libsshrange -- by
@Jakuje and @webknjaz.Previously it was not possible to set the most verbose
libsshlog
levelSSH_LOG_TRACEto get the most verbose log messages useful for
debugging connection issues.Related issues and pull requests on GitHub: #597.
Features
-
Made
libsshuse the Pythonloggingsystem -- by @Jakuje and
@webknjaz.Previously the underlying
libsshlibrary was writing its logs
directly from the C-level intostderr, which caused inconsistent
behavior.The default log level is now set to
ANSIBLE_PYLIBSSH_TRACEand the
downstream loggers are able to trim the verbosity down. If you need
performance, it is possible to disable logging on thelibsshside at
the source by setting a lower logging value, for example:ssh_session.set_log_level(ANSIBLE_PYLIBSSH_NOLOG)
Additionally, the log level can be now be set also through the session
initializer:ssh = Session(log_verbosity=ANSIBLE_PYLIBSSH_TRACE)
or the
connect()method arguments:ssh.connect(log_verbosity=ANSIBLE_PYLIBSSH_TRACE)
Setting any levels imported from
!loggingis also supported.Related issues and pull requests on GitHub: #597.
Packaging updates and notes for downstreams
-
Started shipping binary
armv7lwheels -- by @webknjaz.Related issues and pull requests on GitHub: #648.
-
Upgrading
cibuildwheelto v2.22.0 also picked up Python 3.13 and
enabled respective wheels to be built -- by @webknjaz.Related issues and pull requests on GitHub: #648.
-
The CI/CD/packaging infrastructure has been updated to produce
source distribution <Source Distribution (or "sdist")>file names
consistent with the requirement of uploading artifacts compliant with
the core packaging metadata 2.2 or newer to PyPI and TestPyPI -- by
@webknjaz.Along with that, the infrastructure has been adjusted to expect
625-conforming names in its guard rails checks -- with some
@cidrblocks help. -
Upgrading
cibuildwheelto v3.1.0 also picked up Python 3.14 and
enabled respective wheels to be built -- by @webknjaz.Building the free-threaded wheels remains disabled, though.
-
While upgrading
cibuildwheelto v3.1.4, its defaults changed to
attempt building wheels for the RISC-V architecture. This target is
now disabled explicitly due to the lack of infrastructure -- by
@webknjaz.We may enable it at a later time as a separate dedicated effort.
-
Due to
cibuildwheelto v3 bundlingdelocate0.13.0 that enforces
deployment-target consistency with the brew-installed copy of the
libsshin the build jobs, the macOS wheels we build now require
macOS version 15.0 or newer.-- by @cidrblock and @webknjaz
-
The core packaging metadata now reflects that we test the project
under Python 3.13 and 3.14 (with GIL enabled) -- by @cidrblock and
@webknjaz. -
The pre-cached
armv7limages we build for the packaging
infrastructure are now correctly tagged with thelinux/arm/v7OCI
platform tag -- by @webknjaz.Related issues and pull requests on GitHub: #810.
-
The build backend configuration no longer sets the deprecated
bdist_wheel.universalsetting -- by @webknjaz.This does not influence the packaging artifacts in any way.
Related issues and pull requests on GitHub: #811.
-
The build backend has been configured to exclude
.git_archival.txt
from source distributions built from Git -- by @webknjaz.This reduces the number of false positive warning the backend outputs.
Related issues and pull requests on GitHub: #811.
Contributor-facing changes
-
The repository is now set up to auto-format Python files with Ruff.
Cython keeps being formatted bycython-lint.-- by @webknjaz
-
The linting configuration now uses Ruff to run additional checks on
pure Python modules -- by @webknjaz.Related commits on GitHub:
8170954. -
cibuildwheelstarted making use of thearmv7lcontainer image
following its upgrade to v2.22.0 -- by @webknjaz.Related issues and pull requests on GitHub: #648.
-
Increased the amount of retries in test to avoid possible timeouts on
slower systems -- by @Jakuje.Related issues and pull requests on GitHub: #777.
-
The SSHD start probe client command is now shielded from external
environmnent and will no longer attempt using an SSH agent on the
machine where the tests are involved, nor will it use alternative
authentication methods -- by @webknjaz.Related issues and pull requests on GitHub: #782.
-
Now that the
macos-13runner VM image has been decommissioned, the
CI and CD jobs have been migrated to usemacos-15-intel-- by
@komaldesai13.This includes giving the macOS build job more time to complete as the
new version is a little slower.Related issues and pull requests on GitHub: #791.
-
Updated the version of
libsshto the latest release v0.12.0 in the
cachedmanylinuxbuild environment container images -- by @Jakuje.Related issues and pull requests on GitHub: #797.
-
Updated the bundled version of libssh to 0.12.0 in platform-specific
wheels published on PyPI -- by @Jakuje.Related issues and pull requests on GitHub: #798.
-
Added Fedora and ubi9 images to CI/CD pipeline that are relevant in
2026 and removed EOL Fedora versions -- by @Jakuje.Related issues and pull requests on GitHub: #801.
-
The
pre-commitframework configuration has been updated to be in
sync withawx-pluginsand other projects. It now has a few
additional linters and a workaround for the outdated ones.-- by @webknjaz
Related issues and pull requests on GitHub: #803.
-
The standalone mentions of
pylibsshhave been replaced with
ansible-pylibsshin file license headers -- by @Jakuje.Related issues and pull requests on GitHub: #804.
-
The CI/CD/packaging infrastructure has been updated to produce
source distribution <Source Distribution (or "sdist")>file names
consistent with the requirement of uploading artifacts compliant with
the core packaging metadata 2.2 or newer to PyPI and TestPyPI -- by
@webknjaz.Along with that, the infrastructure has been adjusted to expect
625-conforming names in its guard rails checks -- with some
@cidrblocks help. -
cibuildwheelhas been upgraded to v3.1.4 -- by @webknjaz.Related issues and pull requests on GitHub: #809, #820, #821,
#823, #824. -
The coverage measurement infrastructure now uses the
ctrace
measurement core <config_run_core>across all the Python versions
consistently -- by @webknjaz. -
The CI now tests wheels built for Python 3.13 and 3.14 -- by
@cidrblock and @webknjaz. -
The pre-cached
armv7limages we build for the packaging
infrastructure are now correctly tagged with thelinux/arm/v7OCI
platform tag -- by @webknjaz.Related issues and pull requests on GitHub: #810.
-
The build backend configuration no longer sets the deprecated
bdist_wheel.universalsetting -- by @webknjaz.This does not influence the packaging artifacts in any way.
Related issues and pull requests on GitHub: #811.
-
The CI/CD infrastructure has been set up to avoid parts of the
template injection problem in GitHub Actions workflow definitions. The
shell entry point has been set to bash for any scripts with extra
strictness enabled.-- by @webknjaz
Related issues and pull requests on GitHub: #816.
-
The CI/CD and packaging infrastructure now sources the PyPI project
name fromsetup.cfgrather than hardcoding it -- by @webknjaz.Related issues and pull requests on GitHub: #817.
-
The documentation building infrastructure now integrates
GitHub-related RST roles using thesphinx-issuesextension -- by
@webknjaz.Related issues and pull requests on GitHub: #818.