SSH Fleet

SSH Fleet keeps a registry of SSH hosts and gives sessions ten tools to act on them — run commands on one host, a tag, or the whole fleet, and read, write, or edit remote files over SFTP. A dashboard page in the sidebar shows every host with its status, credential, and tags, plus a live activity feed of every tool call.

The SSH Fleet dashboard: a searchable host list with status dots and credentials, and the live activity feed

Each host carries a hostname, port, username, a friendly label, tags, an optional pinned server-key fingerprint, and exactly one credential. The recommended credential is a reference into PeckBoard’s SSH key vault (Settings → SSH Keys, admin-only), where named private keys are stored encrypted at rest — the plugin then holds only the key’s id and core resolves the material at connect time. A host can instead carry an inline password or private key; inline hosts keep working but show a legacy inline key badge in the dashboard, and their credentials sit unencrypted in the plugin’s data store, so prefer the vault. The SSH client itself is built into PeckBoard core (pure-Rust russh), so credentials stay in memory and are never written to disk by a connection.

Tool What it does
ssh_host_add Registers a host: hostname, username, and exactly one of vault key id, password, or inline key
ssh_host_update Updates a host by id; omitted credentials are kept, passing one switches the auth kind
ssh_host_remove Removes a host by id, label, or hostname
ssh_host_list Lists hosts with credentials redacted and last-seen status, optionally filtered by tag
ssh_probe Connects and authenticates only — returns the server-key fingerprint to pin, and latency
ssh_run Runs a command on one host: stdout, stderr, exit code (1 MiB per stream, up to 600 s)
ssh_run_many Runs one command across a host list, a tag, or the whole fleet, with per-host results
ssh_read_file Reads a remote file over SFTP as text plus base64, capped at 1 MiB
ssh_write_file Creates or overwrites a remote file over SFTP
ssh_edit_file Edits a remote file: full replacement or literal find/replace with an expected-count check

Hosts are referenced by id, label, or hostname, case-insensitively. The one setting, connect_timeout_secs (default 15), bounds the TCP connect and auth handshake.

Hooks, permissions, and upgrade notes

Hooks: mcp.tool.invoke, http.request.before, http.request.authed. Permissions: provide_mcp_tools, ssh, ssh_keys, data_store, user_authority, contribute_sidebar.

Upgrading from 0.2.x re-triggers the approval prompt once — 0.3.0 added the ssh_keys permission for the vault integration. Existing inline hosts are not migrated automatically (plugins have no vault write access); re-create a host with a vault key to move it.


Assembled with many small pecks.

This site uses Just the Docs, a documentation theme for Jekyll.