Skip to main content

sshDCommander

Persistent SSH daemon for AI agents and DevOps automation.

sshDCommander bridges AI agents to remote servers with persistent SSH sessions, SHA-256 verified file transfers, deploy manifests, and certificate-based authentication.

Why sshDCommander?

  • Persistent sessions — daemon maintains long-lived SSH connections across tool calls, eliminating reconnect overhead
  • AI-agent ready — built for Claude Code, Cursor, GitHub Copilot, Aider, Cline, Windsurf, Codex CLI, and any agent with shell access
  • SHA-256 integrity — every file transfer is checksum-verified; deploy manifests record and verify deployment state
  • Certificate auth — built-in Ed25519 CA for certificate-based authentication without password or key sprawl
  • OS keyring — credentials stored in the OS keyring (DPAPI on Windows, libsecret on Linux), never in config files

CLI Tools

Tool Purpose
sshdcmd Execute remote commands with session reuse
sshdcp SFTP file transfer with SHA-256 verification and deploy manifests
sshdctl Daemon management, server profiles, certificate authority

Quick Start

pip install sshdcommander
sshdctl start-daemon
sshdctl server add --name prod --host <your-server-ip> --user deploy
sshdcmd --client-id my-agent "uptime" --server prod --connect

Key Features

  • Multi-server session pool (10+ concurrent sessions)
  • Auto-reconnect with exponential backoff
  • Deploy manifests for deployment integrity verification
  • Reverse integrity auditing (drift detection)
  • Log streaming (sshdcmd --follow) — tail remote logs persistently
  • Docker management (sshdctl docker) — 9 subcommands for container lifecycle
  • Systemd management (sshdctl service) — 8 subcommands for service control
  • Directory sync (sshdcp sync) — bidirectional with SHA-256 checksums
  • Fleet management (--servers, --group) — parallel execution across multiple hosts
  • OpenSSH config import (sshdctl server import-ssh-config)
  • EOL conversion (--eol=on|off|auto) for cross-platform text transfers
  • Data portability export (sshdctl export) — ZIP with OpenSSH config
  • Connection quality metrics (RTT, jitter, reconnect tracking)
  • Remote OS detection (automatic Windows/Linux command adaptation)
  • Script mode for complex multi-step workflows
  • Multi-locale sudo support
  • SSH agent forwarding
  • Mandatory --client-id audit trail
  • Resume interrupted uploads
  • MSYS/Git Bash path demangling (automatic, zero config)

Enterprise Features

Available with an Enterprise license:

  • Policy Engine — command/path filtering, rate limiting, time restrictions, auto-rollback
  • Encrypted Config — AES-256-GCM encrypted policy files with key management
  • Session Recording — full transcripts with HMAC integrity seals
  • SIEM Integration — syslog, webhook, and file event exporters
  • SSO/IDP Integration — OIDC Device Authorization Grant with JWKS verification
  • External Secrets Manager — HashiCorp Vault, AWS, Azure, GCP backends
  • Ephemeral Credentials — short-lived SSH certificates via built-in CA
  • RBAC — role-based access control for team environments

Installation with --target (isolated installs)

When using pip install --target ./lib sshdcommander, the CLI entry points (sshdcmd, sshdcp, sshdctl) are not registered as executables. Two options:

Option A — Use the included wrapper scripts (recommended):

python ./lib/run_sshcmd.py --client-id my-agent "uptime" --server prod --connect
python ./lib/run_sshcp.py --client-id my-agent upload ./file.txt /opt/app/ --server prod
python ./lib/run_sshctl.py start-daemon

The wrappers handle the Python path automatically — no configuration needed.

Option B — Set PYTHONPATH and use -m:

export PYTHONPATH=/path/to/lib:$PYTHONPATH
python -m sshcmd --client-id my-agent "uptime" --server prod --connect
python -m sshcp --client-id my-agent upload ./file.txt /opt/app/ --server prod
python -m sshctl status

For standard usage, pip install sshdcommander registers CLI tools in your PATH automatically.

Links

Metadata

Release files for sshdcommander 4.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for sshdcommander 4.0.3
File Interpreter ABI Platform
sshdcommander-4.0.3-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
sshdcommander-4.0.3-cp312-cp312-manylinux_2_34_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.34+ x86-64 Details

Total release size: 15.9 MB

Release files / sshdcommander-4.0.3-cp314-cp314-win_amd64.whl

Download URL sshdcommander-4.0.3-cp314-cp314-win_amd64.whl
Size 1.9 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
c938d78e40cd988dfb0dbe8f29f685752556d1c2bfc05e23011b4b1c04e248cc
BLAKE2b-256 checksum
How to use checksums
c12745bf09044fea5efe21ed9e2a242b6596ddebb0f11886e35c61134c4f58a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release files / sshdcommander-4.0.3-cp312-cp312-manylinux_2_34_x86_64.whl

Download URL sshdcommander-4.0.3-cp312-cp312-manylinux_2_34_x86_64.whl
Size 14.0 MB
Tags CPython 3.12 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
02050461687188d7b1aa7b2efd5ae6f0744beb24143615e48af72534ecc48d30
BLAKE2b-256 checksum
How to use checksums
da2f68980a93afdc25c4169d887e0e5450a83a43455c3fea9f884557918593be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release history Release notifications | RSS feed

This release

4.0.3 This release

2 release files

4.0.2

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.5.2

2 release files

3.5.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page