High-speed concurrent SSH command runner
Project description
NetPulse SSH
High-performance, standalone Python library & CLI for concurrent SSH command execution across network devices.
netpulse-ssh is an ultra-fast, resilient SSH execution engine extracted from the NetPulse discovery suite. It allows network engineers and automation pipelines to execute commands across hundreds of network devices simultaneously, without blocking I/O or crashing due to a single offline host.
✨ Features
- Massive Concurrency: Scales horizontally using
asyncioto execute commands across hundreds of targets simultaneously. - Legacy Equipment Healing: Automatically detects strict OpenSSH cipher drops and seamlessly falls back to legacy algorithms (e.g.,
diffie-hellman-group1-sha1,3des-cbc) which are frequently required for older Cisco or Juniper gear. - Smart Privilege Escalation: Natively supports Cisco
enablemode privilege escalation without breaking automation. - Pagination Suppression: Automatically injects
terminal length 0before command execution to bypass interactive--More--prompts. - REST API Enabled: Run the built-in FastAPI uvicorn wrapper to serve concurrent execution logic dynamically to web dashboards or automation scripts.
🚀 Quickstart
Installation
Install globally or locally via pip:
pip install netpulse-ssh
CLI Usage
Execute a command across multiple devices concurrently and get a beautiful, structured table summary:
netpulse-ssh execute 192.168.1.5 10.0.0.1 -c "show ip interface brief" -u admin -p password
Python API Integration
Use our cleanly typed Pydantic models and logic natively inside your own tools. The runner is completely agnostic and returns an audit object containing stdout/stderr per host:
import asyncio
from netpulse.ssh.models import SshHostConfig
from netpulse.ssh.runner import SshRunnerService
async def main():
hosts = [
SshHostConfig(ip="192.168.1.1", username="admin", password="password"),
SshHostConfig(ip="10.0.0.1", username="admin", password="password"),
]
runner = SshRunnerService()
audit = await runner.execute_concurrently(hosts, "show version")
for result in audit.results:
print(f"Host {result.ip} status: {result.status}")
print(result.stdout)
if __name__ == "__main__":
asyncio.run(main())
📖 Documentation
Detailed documentation is available in the docs/ directory:
- 🗺️ Usage Guide - Deep dive into CLI and REST API examples.
- 🏗️ Architecture - Understand the asynchronous execution engine and legacy fallbacks.
- 🧠 Design Decisions - Read about the decoupled persistence approach.
- 🧪 Contributing - The development onboarding guide.
🤝 Contributing
We welcome contributions from the community! netpulse-ssh is open-source and maintained actively.
Please read our Contributing Guidelines to understand how to clone the repository and submit your Pull Requests.
📜 License
Distributed under the MIT License. See LICENSE for more information.
Project details
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file netpulse_ssh-0.1.1.tar.gz.
File metadata
- Download URL: netpulse_ssh-0.1.1.tar.gz
- Upload date:
- Size: 88.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab099489956817140332ee1d838d667fd7baa3f57f3609162431ab5e5e352c46
|
|
| MD5 |
c9612c72459022945ab83ef37d9e56f5
|
|
| BLAKE2b-256 |
58420919ed774070dd3dd5766e440c87b168112e22cd40109e65d4006ae75919
|
File details
Details for the file netpulse_ssh-0.1.1-py3-none-any.whl.
File metadata
- Download URL: netpulse_ssh-0.1.1-py3-none-any.whl
- Upload date:
- Size: 9.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8b4c7b4f844f88c312ce9780400b2058d52c0bfa1d90be4bd8330c9d2688366
|
|
| MD5 |
359076a24f58421707355f3936553022
|
|
| BLAKE2b-256 |
eceb92294fa9a922b1507f3479e2c3cab2fb9430d7a99d9c7f231ef23f81b4d5
|