SpeedyCTL Agent Architecture

Central management for your entire server estate

Connect multiple servers through the SpeedyCTL agent and manage them from a single control plane. Every privileged operation is signed, audited, and executed through a secure privilege separation layer.

Architecture

How SpeedyCTL works

Privilege separation

The panel never executes root commands. All privileged operations—website creation, SSL issuance, mail provisioning—go through the SpeedyCTL agent running as root on each server.

HMAC-SHA256 signing

Every request is cryptographically signed with a shared panel token. The agent verifies the signature before executing any action, ensuring only authorized requests are processed.

Dual transport

Local servers communicate over Unix domain sockets. Remote servers use SSH with forced commands—the panel key can only talk to the agent, never obtain a shell.

Node registry

Each server is a SpeedyCtlNode with its own transport configuration, SSH credentials, and signing token. Per-server keys allow granular access control.

Job queue

Requests are queued as jobs and executed asynchronously by worker threads. Claim-by-update semantics prevent double execution across workers.

Action whitelisting

The agent only executes actions registered in the module registry. Each module declares its allowed SpeedyCTL actions—anything else is rejected.

Audit trail

Every job enqueue, execution, and outcome is recorded in the HMAC-SHA256 chained audit log. Tamper-evident logging provides complete accountability.

Dependency chaining

Jobs can depend on each other: create site → issue SSL → create FTP. If the parent fails, dependent jobs are automatically cancelled.

Transport

Local and remote server connectivity

Local transport

Servers on the same machine as the panel communicate over Unix domain sockets. Zero network overhead, maximum performance.

SSH transport

Remote servers are reached via SSH with key-based authentication. The panel key is locked down with a forced command — it can only talk to the agent, never obtain a shell.

Per-server SSH keys

Each node can have its own SSH private key. Nodes without a per-server key fall back to the panel's global key. No passwords stored anywhere.

Token files

Signing tokens are stored as root-only files outside the database. Per-node token paths allow different trust boundaries per server.

Workflow

From request to execution

Job enqueued

The panel validatesates the action against the module registry whitelist and inserts a PENDING job into the database.

Worker claims job

A dispatcher worker atomically claims the oldest runnable job using claim-by-update. Dependencies are checked—jobs with unfinished parents are skipped.

Request signed

The worker builds a SpeedyCtlClient with the node's transport config and signs the request with HMAC-SHA256 using the panel token.

Agent executes

The signed request is delivered to the SpeedyCTL agent over Unix socket or SSH. The agent verifies the signature and executes the action as root.

Outcome synced

The worker records the result, updates the resource state (active/failed), and appends to the audit trail. Failed jobs can be retried or resolved.

Monitoring

Health checks and visibility

Ping probes

The panel periodically pings each node. Local transport checks socket connectivity. SSH transport runs an end-to-end probe: SSH in, relay to agent, ping action.

Resource sampling

ServerStats records CPU, memory, disk, and load averages at regular intervals. Historical data powers monitoring charts and capacity planning.

Job status tracking

Every job transitions through PENDING → RUNNING → COMPLETED/FAILED. The dashboard shows real-time job status with progress logs.

Stale job recovery

At startup, the dispatcher requeues any jobs left in RUNNING state from a previous crash. No job is ever lost or stuck forever.

Security model

Zero trust, full audit

The SpeedyCTL architecture enforces privilege separation at every layer. The panel web application runs unprivileged and can only request work through signed job requests. The SpeedyCTL agent runs as root on each server but only executes whitelisted actions. Every request is cryptographically signed, every outcome is audited, and every SSH connection uses key-based authentication with forced commands. The result: complete accountability without exposing root access to the web application.

Centralise your server management

Manage multiple servers through the SpeedyCTL agent architecture. Get in touch to discuss your infrastructure requirements.