Metadata-Version: 2.4
Name: sshdcommander
Version: 4.0.2
Summary: Persistent SSH daemon for AI agents — session pooling, SHA-256 verified SFTP, deploy manifests, certificate auth, and OS keyring credential storage. Built for Claude Code, Cursor, GitHub Copilot, and any AI agent with shell access.
Author: Veniatis
License-Expression: LicenseRef-Proprietary
Project-URL: Homepage, https://sshdcommander.com
Project-URL: Documentation, https://sshdcommander.com/docs
Project-URL: Download, https://pypi.org/project/sshdcommander/
Project-URL: Support, https://sshdcommander.com/support
Keywords: ssh,sftp,daemon,ai,agent,automation,deployment,devops,infrastructure,cli,persistent,session,paramiko,keyring,certificate,integrity,manifest,sha256,claude,cursor,copilot,mcp,sshdcommander,sshd-commander,sshd_commander
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: System :: Networking
Classifier: Topic :: System :: Systems Administration
Classifier: Topic :: Software Development :: Build Tools
Classifier: Topic :: Security
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: paramiko>=3.4.0
Requires-Dist: keyring>=25.0
Requires-Dist: cryptography>=42.0
Requires-Dist: httpx>=0.27.0
Requires-Dist: portalocker>=2.0
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: pytest-cov>=5.0; extra == "dev"
Requires-Dist: pytest-timeout>=2.4; extra == "dev"
Requires-Dist: psutil>=7.0; extra == "dev"
Requires-Dist: Cython>=3.0; extra == "dev"
Provides-Extra: vault
Requires-Dist: hvac>=2.0; extra == "vault"
Provides-Extra: aws
Requires-Dist: boto3>=1.30; extra == "aws"
Provides-Extra: azure
Requires-Dist: azure-keyvault-secrets>=4.7; extra == "azure"
Requires-Dist: azure-identity>=1.14; extra == "azure"
Provides-Extra: gcp
Requires-Dist: google-cloud-secret-manager>=2.16; extra == "gcp"
Provides-Extra: sso
Requires-Dist: authlib>=1.3; extra == "sso"
Dynamic: license-file

# 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

```bash
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):**

```bash
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`:**

```bash
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

- **Website:** [sshdcommander.com](https://sshdcommander.com)
- **Documentation:** [sshdcommander.com/docs](https://sshdcommander.com/docs)
- **AI Instructions:** [sshdcommander.com/docs/ai-instructions](https://sshdcommander.com/docs/ai-instructions/)
- **Changelog:** [CHANGELOG.md](https://github.com/AMG-75/sshdcommander/blob/main/CHANGELOG.md)
