MCP Server SSH Client について
MCP Server SSH Clientは、リモートマシン上のMCPサーバーに接続するコマンドラインクライアントです。SSH経由でMCPリクエストを転送し、ローカルプロキシを介して機能を利用できます。鍵認証に対応しています。
主な機能
- 01SSHによるリモートMCPサーバー接続
- 02リモート機能のローカルプロキシ
- 03MCPプロトコルリクエストの転送
- 04SSH鍵認証
活用シーン
- 01リモートマシン上のツールへのアクセス
- 02ローカルMCPホストからリモートサーバーへの接続
- 03MCP Inspectorによるリモートツールのテスト
MCP 対応
SSH経由でリモートMCPサーバーに接続し、そのツール、プロンプト、リソースをローカルプロキシ経由で公開します。MCPリクエストと応答はSSH接続を通じて転送されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP サーバー SSH クライアント
SSH 経由でリモートの MCP サーバーに接続する、Model Context Protocol サーバー(リモート SSH クライアント)です。このクライアントを使うと、リモートサーバー上でホストされている MCP ツールにアクセスして利用でき、MCP 通信のためのセキュアなチャネルを提供します。
機能
- SSH 経由で任意の MCP サーバーに接続
- セキュアな SSH チャネルを通じて、すべての MCP プロトコルコマンドをプロキシ
- 鍵ベースの認証をサポート
- ツール、プロンプト、リソースなど、MCP の各種機能をサポート
インストール
uv で管理されている Python プロジェクトでは、次のように依存関係に追加します。
uv add m2m-mcp-server-ssh-client
依存関係の管理に pip を使用するプロジェクトでは、次のようにします。
pip install m2m-mcp-server-ssh-client
ソースから直接インストールするには、次のようにします。
git clone https://github.com/Machine-To-Machine/m2m-mcp-server-ssh-client.git
cd m2m-mcp-server-ssh-client
pip install -e .
プロジェクト内でサーバーを実行するには、次のようにします。
uv run m2m-mcp-server-ssh-client
よくあるユースケース
1. デモサーバーですぐに試す
さまざまな MCP ツールを設定済みで、すぐに使える公開デモサーバーを提供しています。(オープンな分散型レジストリを公開するまで、このサーバーを利用できます。)
このデモサーバーには、HackerNews、MLB Stats API、Formula 1 API のツールなど、複数の MCP サーバーが含まれており、試してみることができます。
Claude
Claude をこのサーバーに接続するには、次の内容を Claude Desktop の設定に追加します。
"mcpServers": {
"remote-mcp-tools": {
"command": "uvx",
"args": [
"m2m-mcp-server-ssh-client",
"--host", "mcp-beta.machinetomachine.ai",
"--port", "8022",
"--use-key-server"
]
}
}
コマンドライン
# Connect to the M2M public demo server with automatic key exchange
uv run m2m-mcp-server-ssh-client --host mcp-beta.machinetomachine.ai --use-key-server
2. ローカル開発でのテスト
独自の SSH サーバーの設定方法については、m2m-mcp-server-ssh-serverを参照してください。
独自の MCP ツールを使ってローカルでテストするには、次のようにします。
# Connect to a local MCP SSH server
uv run m2m-mcp-server-ssh-client
上記のコマンドは、ポート 8022 で待ち受けているローカル SSH サーバーへの接続を試みます。
ローカルでテストする際は、鍵サーバーを使用すると鍵交換を簡略化できます。
# Use the key server for automatic key management (if server has --run-key-server enabled)
uv run m2m-mcp-server-ssh-client --use-key-server
上記のコマンドは、ポート 8000 で実行中の鍵サーバーを使用しようとします。
3. リモートサーバーへの接続
ホストしている独自の MCP サーバーに接続するには、次のようにします。
# Using existing SSH keys
uv run m2m-mcp-server-ssh-client --host your-server.example.com --client-key ~/.ssh/your_key --known-hosts ~/.ssh/known_hosts
リモートサーバーで鍵サーバーを実行し、クライアントで設定すると、鍵交換を簡略化できます。
AI プラットフォームでの使用
Claude Desktop との連携
次の内容を Claude Desktop の設定に追加します。
"mcpServers": {
"remote-mcp-tools": {
"command": "uvx",
"args": [
"m2m-mcp-server-ssh-client",
"--host", "mcp-beta.machinetomachine.ai",
"--port", "8022",
"--use-key-server"
]
}
}
MCP Inspector
デバッグや利用可能なツールの確認には、次のようにします。
npx @modelcontextprotocol/inspector -- uvx m2m-mcp-server-ssh-client --host mcp-beta.machinetomachine.ai --port 8022 --use-key-server
使い方
コマンドラインオプション
--host:リモート SSH サーバーのホスト(デフォルト:"localhost")--port:リモート SSH サーバーのポート(デフォルト:8022)--username:SSH ユーザー名(デフォルト:"mcp")--client-key:クライアントの秘密鍵ファイル(デフォルト:"~/.ssh/m2m_mcp_server_ssh_client")--known-hosts:known hosts ファイルのパス(デフォルト:"~/.ssh/known_hosts")--passphrase:秘密鍵のパスフレーズ(デフォルト:None)--disable-host-key-checking:サーバー署名の検証をスキップ(デフォルト:False)--log-level:ログレベルを設定(デフォルト:INFO)
詳細な例
リモートサーバーへの基本接続
ポート 8022 で実行中のリモート MCP サーバー(SSH サーバー)に接続します。
uvx m2m-mcp-server-ssh-client --host mcp.example.com
カスタム SSH 鍵の使用
認証に特定の SSH 鍵を指定します。
uvx m2m-mcp-server-ssh-client --host mcp.example.com --client-key ~/.ssh/mcp_custom_key
鍵がパスフレーズで保護されている場合は、次のようにします。
uvx m2m-mcp-server-ssh-client --host mcp.example.com --client-key ~/.ssh/mcp_custom_key --passphrase "your-passphrase"
トラブルシューティング用のデバッグモード
接続の問題を調査するため、詳細なログを有効にします。
uvx m2m-mcp-server-ssh-client --host mcp.example.com --log-level DEBUG
キーサーバーとの統合
MCP SSH Client は、動的なキー交換と検証にキーサーバーを使用できます。
uvx m2m-mcp-server-ssh-client --host mcp.example.com --use-key-server
キーサーバーを使用する場合:
- クライアントはサーバーの公開鍵を
http://host:key-server-port/server_pub_keyから取得します - クライアントは公開鍵を
http://host:key-server-port/registerでサーバーに登録します - SSH 接続用の一時的な
known_hostsファイルが作成されます
この機能は --known-hosts および --disable-host-key-checking とは併用できません。
ホスト鍵のチェックを無効にする
⚠️ セキュリティ警告:
--disable-host-key-checkingを使用すると、中間者攻撃に対して接続が脆弱になります。このオプションは、信頼できるネットワーク内、または開発/テスト目的でのみ使用してください。
uvx m2m-mcp-server-ssh-client --host localhost --disable-host-key-checking
Claude Desktop の設定
Claude の設定に追加します。
"mcpServers": {
"remote-servers": {
"command": "uvx",
"args": [
"m2m-mcp-server-ssh-client",
"--host", "example.com",
"--port", "8022",
"--username", "mcp"
]
}
}
特定の鍵を使用する、より安全な設定の場合:
"mcpServers": {
"remote-servers": {
"command": "uvx",
"args": [
"m2m-mcp-server-ssh-client",
"--host", "mcp-server.example.com",
"--port", "8022",
"--username", "claude-mcp",
"--client-key", "~/.ssh/claude_mcp_key",
"--known-hosts", "~/.ssh/mcp_remote_server"
]
}
}
動作の仕組み
MCP Server SSH Client は、MCP ツール用の MCP Server SSH Server(m2m-mcp-server-ssh-server)を実行しているリモートサーバーに SSH 接続を確立します。その後、次の処理を行います。
- リモート MCP サーバーの機能をミラーリングするローカルプロキシサーバーを作成します
- すべての MCP リクエストを SSH 接続経由でリモートサーバーに転送します
- リモートサーバーからの応答をローカルクライアントに返します
これにより、リモートマシン上で動作するツールを、ローカルにインストールされているかのように使用できます。
認証フロー
%%{init: {'theme':'default', 'themeVariables': { 'primaryColor': '#5D8AA8', 'primaryTextColor': '#fff', 'primaryBorderColor': '#1F456E', 'lineColor': '#5D8AA8', 'secondaryColor': '#006400', 'tertiaryColor': '#fff' }}}%%
sequenceDiagram
participant Host as MCP Host<br>(Claude/Cursor)
participant Client as MCP SSH Client
participant KeySrv as Key Server<br>(HTTP API)
participant SSHSrv as MCP SSH Server
participant MCP as MCP Servers
Note over Client,SSHSrv: Initial Key Exchange & Authentication
Client->>Client: Generate SSH key pair<br>if does not exist
Client->>KeySrv: GET /server_pub_key
KeySrv->>Client: Return server's public key
Client->>Client: Store server key in<br>temporary known_hosts
Client->>KeySrv: POST /register<br>{client_pub_key: "ssh-ed25519 AAAA..."}
KeySrv->>SSHSrv: Store client public key<br>in authorized keys
KeySrv->>Client: {status: "success"}
Note over Client,SSHSrv: Secure SSH Connection
Client->>SSHSrv: SSH handshake with<br>client key authentication
SSHSrv->>SSHSrv: Verify client key<br>against authorized keys
SSHSrv->>Client: Authentication successful
Note over Client,SSHSrv: MCP Communication
Host->>Client: JSONRPC request
Client->>SSHSrv: Forward request<br>over SSH tunnel
SSHSrv->>MCP: Route request to<br>appropriate MCP server
MCP->>SSHSrv: Process and return results
SSHSrv->>Client: Send response over SSH
Client->>Host: Return JSONRPC response
Note over Client,SSHSrv: Session Management
alt Session Termination
Host->>Client: Close connection
Client->>SSHSrv: Terminate SSH session
SSHSrv->>SSHSrv: Clean up resources
end
セキュリティに関する考慮事項
- 本番環境では必ずホスト鍵の検証を使用してください
- セキュリティを強化するため、パスフレーズで保護された SSH 鍵を使用してください
- MCP 接続専用の SSH 鍵の使用を検討してください
- SSH 鍵ファイルに適切なアクセス権限(600)を設定してください
- リモートサーバーでは、専用の権限を制限したユーザーを使用してください
よくある問題のトラブルシューティング
接続拒否
Error running MCP SSH client: [Errno 111] Connection refused
解決策:ホストとポートが正しいこと、および SSH サービスが実行中であることを確認してください。
認証の失敗
Error running MCP SSH client: Authentication failed
解決策:鍵ファイルのパスを確認してください。リモートサーバーに公開鍵が登録されていることを確認してください。
ホスト鍵の検証失敗
Error running MCP SSH client: Host key verification failed
解決策:ホスト鍵を known_hosts ファイルに追加するか、--disable-host-key-checking を使用してください(テスト目的のみ)。
依存関係
- anyio (>=4.5.0)
- asyncssh (>=2.20.0)
- mcp (>=1.1.3)
- pydantic (>=2.0.0)
開発
開発環境のセットアップ
git clone https://github.com/Machine-To-Machine/m2m-mcp-server-ssh-client.git
cd m2m-mcp-server-ssh-client
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv pip install -e ".[dev]"
コード品質
# Run linting
uv run ruff check .
# Run formatting check
uv run ruff format --check .
# Run security checks
uv run bandit -r src/
デバッグ
MCP inspector を使用してクライアントをデバッグできます。
npx @modelcontextprotocol/inspector uvx m2m-mcp-server-ssh-client --host example.com
高度なデバッグには、次のワークフローを使用してください。
--log-level DEBUGを指定してクライアントを起動します- SSH 接続パラメーターとハンドシェイクのプロセスを確認します
- カスタムキーを使用している場合は、パスとアクセス権限が正しいことを確認します
- まず
ssh -vを直接使用して、基本的な接続性をテストします
コントリビューション
m2m-mcp-server-ssh-client の拡張と改善に役立つコントリビューションを歓迎します。新機能の追加、既存機能の強化、ドキュメントの改善など、皆さまからのご意見は貴重です。
プルリクエストを歓迎します!新しいアイデア、バグ修正、機能強化をぜひお寄せください。
コントリビューションガイドライン
- リポジトリをフォークします
- 機能ブランチを作成します:
git checkout -b feature-name - 変更をコミットします:
git commit -am 'Add some feature' - ブランチにプッシュします:
git push origin feature-name - プルリクエストを送信します
ライセンス
MIT License - 詳細は LICENSE ファイルを参照してください。
作者
- Machine To Machine
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。