SSH Fleet について
SSH Fleetは、Kubernetes外のSSHホスト群を診断・操作するエージェント向けMCPサーバーです。読み取り専用の定型チェックと、単一ホストへの任意コマンド実行を分けています。
主な機能
- 01タグ指定ホストの読み取り専用チェック
- 02単一ホストでのコマンド実行
- 03フェイルクローズのホスト許可リスト
- 04SSHキーをモデルコンテキスト外で管理
- 05出力上限とホストごとのタイムアウト
活用シーン
- 01稼働時間、ディスク、メモリ、障害、ログの確認
- 02許可リスト内のホストでコマンドを実行
MCP 対応
Streamable HTTP、SSE、stdio経由で、MCPクライアントに `ssh_probe` と `ssh_exec` ツールを提供します。任意コマンド実行の承認はMCPクライアント側で管理します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e SSH_FLEET_TRANSPORT -e SSH_FLEET_CMD_TIMEOUT_SECONDS -e SSH_FLEET_OUTPUT_CAP_BYTES -e SSH_FLEET_PROBE_CONCURRENCY -e SSH_FLEET_PROBE_MAX_HOSTS -e SSH_FLEET_AUTH_TOKEN ghcr.io/inhuman/mcp-ssh-fleet:0.1.5SSH_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).ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/inhuman/mcp-ssh-fleet:0.1.5stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcp-ssh-fleet
英語 | ロシア語
Kubernetes 外部のホスト群に対し、SSH 経由でエージェントに 2 つのツールを提供する MCP サーバーです。SSH キーはマウントされたシークレットであり(モデルのコンテキストには決して入りません)、インベントリはフェイルクローズ方式の許可リストです。
ツール
ssh_probe(tags, check)— 指定したタグを持つすべてのホストに対する、厳選された読み取り専用の診断です(GitLab Runner のタグと同様の AND セマンティクス)。checkは組み込みのセットから選択します:uptime、disk、mem、failed、logs。任意のコマンドは渡せません。クラス:read-only。ssh_exec(host, command)— インベントリ内の 1 台のホスト(名前またはアドレスで指定。インベントリ外のホストは拒否されます)で実行する、任意の非対話型コマンドです。クラス:write-external。サーバーはコマンドを実行しますが、アクセス制御(承認/RBAC)は MCP クライアント側で行います。
両ツールとも、出力サイズの上限、ホストごとのタイムアウト、TOFU ホストキー確認(フィンガープリントをログに記録)、ホストごとに 1 セクションで出力する機能を備えています。
設定(環境変数)
| 変数 | デフォルト | 意味 |
|---|---|---|
SSH_FLEET_TRANSPORT | http | http(StreamableHTTP、エンドポイント /mcp) | sse | stdio |
SSH_FLEET_ADDR | :8080 | http/sse のリッスンアドレス |
SSH_FLEET_AUTH_TOKEN | — | 任意の X-MCP-AUTH トークン |
SSH_FLEET_INVENTORY_PATH | /etc/ssh-fleet/inventory.yaml | インベントリへのパス(ConfigMap) |
SSH_FLEET_KEY_PATH | /etc/ssh-fleet/id_ed25519 | 秘密鍵へのパス(シークレット) |
SSH_FLEET_OUTPUT_CAP_BYTES | 8192 | セクションごとの出力上限 |
SSH_FLEET_CMD_TIMEOUT_SECONDS | 20 | ホストごとのタイムアウト |
SSH_FLEET_PROBE_CONCURRENCY | 8 | プローブ並列実行プール |
SSH_FLEET_PROBE_MAX_HOSTS | 50 | 1 回のプローブで対象にできるホスト数の安全上限 |
インベントリの形式については、deploy/inventory.example.yaml を参照してください。
クイックスタート(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
これは、MCP Registry(io.github.inhuman/mcp-ssh-fleet)からインストールする際に、MCP クライアントが使用する形式です。
MCP クライアントへの接続(http/sse)
デフォルトでは、サーバーは StreamableHTTP を使用します。エンドポイント /mcp(http://<host>:8080/mcp のような URL)を持つ通常の HTTP MCP サーバーとして登録してください。両方のツールがクライアントで使用可能になります。
クライアント側のセキュリティに関する推奨事項:
ssh_probeはread-only(厳選されたチェックのみ)であり、広く許可できます。ssh_execは任意のコマンドを実行できます(write-external)。アクセス制御はクライアント側で行ってください(承認/RBAC/ユーザー許可リスト)。サーバーはインベントリ内のホストでコマンドを実行するだけで、アクセス制御ポリシーは決定しません。
開発
make test # unit tests + e2e against a real in-process SSH server
make vet
make vulncheck
make build
make docker
リリース:タグ vX.Y.Z → GitHub Actions がマルチアーキテクチャイメージをビルドし、
ghcr.io/inhuman/mcp-ssh-fleet に公開します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。