MCP サーバー SSH クライアント

SSH経由でリモートMCPサーバーに接続するモデルコンテキストプロトコルサーバー(リモートSSHクライアント)。このクライアントは、リモートサーバーでホストされているMCPツールへのアクセスと利用を可能にし、MCP通信のための安全なチャネルを提供します。
特徴
Related MCP server: SSH MCP Server
インストール
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 デスクトップ設定に以下を追加するだけです。
"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 デスクトップの設定に以下を追加します:
"mcpServers": {
"remote-mcp-tools": {
"command": "uvx",
"args": [
"m2m-mcp-server-ssh-client",
"--host", "mcp-beta.machinetomachine.ai",
"--port", "8022",
"--use-key-server"
]
}
}
MCP検査官
デバッグや利用可能なツールの調査:
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 : 既知のホストファイルへのパス(デフォルト: "~/.ssh/known_hosts")
--passphrase : 秘密鍵のパスフレーズ(デフォルト: なし)
--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 クライアントは、動的なキー交換と検証のためにキー サーバーを使用できます。
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デスクトップ用の設定
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クライアントは、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)
ピダンティック (>=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 インスペクタを使用してクライアントをデバッグできます。
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 ファイルを参照してください。
著者