SSH Fleet
Curated ssh_probe diagnostics and single-host ssh_exec over an allowlisted SSH fleet.
ماذا يمكنك أن تفعل مع SSH Fleet؟
ssh_probe(tags, check)— curated read-only diagnostics on every hostssh_exec(host, command)— one arbitrary non-interactive command on ONE
التثبيت
أضف هذا إلى إعدادات MCP في عميلك (Claude Desktop: claude_desktop_config.json، وCursor: .cursor/mcp.json، ويستخدم VS Code وغيره الصيغة نفسها «mcpServers»).
ghcr.io/inhuman/mcp-ssh-fleet:0.1.5claude mcp add ssh-fleet -e 'SSH_FLEET_TRANSPORT=stdio' -e 'SSH_FLEET_CMD_TIMEOUT_SECONDS=20' -e 'SSH_FLEET_OUTPUT_CAP_BYTES=8192' -e 'SSH_FLEET_PROBE_CONCURRENCY=8' -e 'SSH_FLEET_PROBE_MAX_HOSTS=50' -e 'SSH_FLEET_AUTH_TOKEN=<your ssh_fleet_auth_token>' -- docker run -i --rm ghcr.io/inhuman/mcp-ssh-fleet:0.1.5
{
"mcpServers": {
"ssh-fleet": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/inhuman/mcp-ssh-fleet:0.1.5"
],
"env": {
"SSH_FLEET_TRANSPORT": "stdio",
"SSH_FLEET_CMD_TIMEOUT_SECONDS": "20",
"SSH_FLEET_OUTPUT_CAP_BYTES": "8192",
"SSH_FLEET_PROBE_CONCURRENCY": "8",
"SSH_FLEET_PROBE_MAX_HOSTS": "50",
"SSH_FLEET_AUTH_TOKEN": "<your ssh_fleet_auth_token>"
}
}
}
}
متغيرات البيئة
SSH_FLEET_TRANSPORTMCP transport. Must be 'stdio' for direct docker/stdio use.SSH_FLEET_CMD_TIMEOUT_SECONDSPer-host command timeout in seconds (1..600).SSH_FLEET_OUTPUT_CAP_BYTESCap on output bytes per host section (>=256).SSH_FLEET_PROBE_CONCURRENCYParallelism for ssh_probe.SSH_FLEET_PROBE_MAX_HOSTSSafety cap on the number of hosts in one probe.SSH_FLEET_AUTH_TOKENسري Optional X-MCP-AUTH bearer token (only used by the http/sse transports).
التوثيق
مأخوذ من ملف README للمشروع على GitHub ويُحدَّث أسبوعيًا. تفتح الروابط على GitHub.
المحتويات
mcp-ssh-fleet
English | Русский
MCP server that gives an agent two tools over SSH to a fleet of hosts outside Kubernetes. The SSH key is a mounted secret (never enters model context); the inventory is a fail-closed allowlist.
Tools
ssh_probe(tags, check)— curated read-only diagnostics on every host carrying the given tags (AND semantics, like GitLab runner tags).checkis one of a built-in set:uptime,disk,mem,failed,logs. Arbitrary commands cannot be passed. Class:read-only.ssh_exec(host, command)— one arbitrary non-interactive command on ONE inventory host (by name or address; hosts outside the inventory are refused). Class:write-external: the server executes the command, while access gating (approval/RBAC) belongs to the MCP client.
Both: output size cap, per-host timeout, TOFU host-key check (fingerprint in logs), output as one section per host.
Configuration (env)
| Variable | Default | Meaning | ||
|---|---|---|---|---|
SSH_FLEET_TRANSPORT | http | http (StreamableHTTP, endpoint /mcp) \ | sse \ | stdio |
SSH_FLEET_ADDR | :8080 | listen address for http/sse | ||
SSH_FLEET_AUTH_TOKEN | — | optional X-MCP-AUTH token | ||
SSH_FLEET_INVENTORY_PATH | /etc/ssh-fleet/inventory.yaml | path to the inventory (configmap) | ||
SSH_FLEET_KEY_PATH | /etc/ssh-fleet/id_ed25519 | path to the private key (secret) | ||
SSH_FLEET_OUTPUT_CAP_BYTES | 8192 | output cap per section | ||
SSH_FLEET_CMD_TIMEOUT_SECONDS | 20 | per-host timeout | ||
SSH_FLEET_PROBE_CONCURRENCY | 8 | probe parallelism pool | ||
SSH_FLEET_PROBE_MAX_HOSTS | 50 | safety cap on hosts per probe |
Inventory format — see deploy/inventory.example.yaml.
Quickstart (docker, stdio)
docker run -i --rm \
-v /path/to/inventory.yaml:/etc/ssh-fleet/inventory.yaml:ro \
-v /path/to/id_ed25519:/etc/ssh-fleet/id_ed25519:ro \
-e SSH_FLEET_TRANSPORT=stdio \
ghcr.io/inhuman/mcp-ssh-fleet:latest
This is the shape MCP clients use when installing from the
MCP Registry
(io.github.inhuman/mcp-ssh-fleet).
Connecting an MCP client (http/sse)
By default the server speaks StreamableHTTP; register it as a regular HTTP MCP
server with endpoint /mcp (URL like http://<host>:8080/mcp). Both tools
become available to the client.
Client-side security recommendations:
ssh_probeisread-only(curated checks only) and can be granted broadly.ssh_execis arbitrary execution (write-external). Gate its access on the client side (approval / RBAC / user allowlist) — the server merely executes a command on an inventory host; it does not decide access policy.
Development
make test # unit tests + e2e against a real in-process SSH server
make vet
make vulncheck
make build
make docker
Release: tag vX.Y.Z → GitHub Actions builds and publishes a multi-arch image
to ghcr.io/inhuman/mcp-ssh-fleet.
الأسئلة الشائعة
ما هو SSH Fleet؟
Curated ssh_probe diagnostics and single-host ssh_exec over an allowlisted SSH fleet.
كيف أثبّت SSH Fleet؟
يعمل على جهازك. في Claude Code: claude mcp add ssh-fleet -e 'SSH_FLEET_TRANSPORT=stdio' -e 'SSH_FLEET_CMD_TIMEOUT_SECONDS=20' -e 'SSH_FLEET_OUTPUT_CAP_BYTES=8192' -e 'SSH_FLEET_PROBE_CONCURRENCY=8' -e 'SSH_FLEET_PROBE_MAX_HOSTS=50' -e 'SSH_FLEET_AUTH_TOKEN=<your ssh_fleet_auth_token>' -- docker run -i --rm ghcr.io/inhuman/mcp-ssh-fleet:0.1.5. وفي العملاء الآخرين، الصق إعداد JSON من هذه الصفحة في إعدادات MCP الخاصة بهم.
هل يحتاج SSH Fleet إلى مفتاح API؟
نعم. يتطلب SSH_FLEET_AUTH_TOKEN، وتضبطها في إعداداته.
هل SSH Fleet مفتوح المصدر؟
نعم. شيفرته متاحة على GitHub بترخيص MIT.
من يصون SSH Fleet؟
ينشره inhuman. يدرجه AI.tn لكنه لا يصونه ولا يوصي به.
من سجل MCP الرسمي. الإدراج ليس توصية: راجع شيفرة الخادم وصلاحياته قبل منحه الوصول إلى بياناتك.