SSH MCP Server について
SSH MCP Server は、MCP 経由でリモートサーバーへの SSH 操作を提供します。エージェントによるコマンド実行、ファイル転送、セッション管理に対応し、名前付き認証情報を保存して初回接続時にホストキーを検証・固定します。
主な機能
- 01SSH 認証情報の保存と管理
- 02シェルおよび argv 形式のコマンド実行
- 03SCP または rsync によるファイル転送
- 04対話型 SSH セッションの管理
- 05ポートフォワーディングの開始と管理
- 06ホストキーの検証と固定
活用シーン
- 01リモートホストでの運用コマンド実行
- 02ローカルとリモート間のファイル転送
- 03対話型リモートセッションでの作業
- 04リモート接続用ポートフォワーディングの設定
MCP 対応
MCP サーバーとして、認証情報管理、SSH コマンド実行、ファイル転送、セッション、トンネルのツールを MCP クライアントに公開し、リモートサーバー操作を可能にします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
SSH MCP サーバー
SSH 機能を提供する Model Context Protocol(MCP)サーバーの実装です。このサーバーを使うと、MCP プロトコルを介して安全なリモートアクセスとコマンドの実行ができます。
機能
- MCP プロトコルを使用した SSH サーバーの実装
- データを永続化するための SQLite データベース統合
- 型安全性と開発エクスペリエンスの向上を実現する TypeScript の実装
前提条件
- Node.js 18 以降
- npm または yarn パッケージマネージャー
- 開発には TypeScript の知識が必要です
インストール
Smithery 経由でのインストール
Smithery 経由で Claude Desktop 用の SSH Server を自動的にインストールするには:
npx -y @smithery/cli install @KinoThe-Kafkaesque/ssh-mcp-server --client claude
手動インストール
- リポジトリをクローンします:
git clone <repository-url>
cd ssh-server
- 依存関係をインストールします:
npm install
- プロジェクトをビルドします:
npm run build
使い方
設定
サーバーは SSH 認証情報を保存するために SQLite データベース(ssh.db)を使用します。データベースファイルはサーバーの起動時に自動的に作成されます。
ツール
サーバーは名前付きの認証情報を保存し、その後の各リモート操作では credentialName を指定します。privateKeyPath には既存の秘密鍵へのパスを指定する必要があります(~/ はホームディレクトリに展開されます)。
ホスト鍵は検証されます。認証情報で初めて接続すると、サーバーのホスト鍵のフィンガープリントが ~/ssh.db に記録されます。以後の接続で異なる鍵が提示された場合は、HOST_KEY_MISMATCH エラーで拒否されます。既知の鍵を事前に登録するには、hostKeyFingerprint(サーバーで ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub を実行すると表示される SHA256:... の値)を渡します。正当な鍵の変更後は、認証情報を削除して再度追加してください。
add_credential:{ "name", "host", "username", "privateKeyPath", "hostKeyFingerprint"? }を保存します。list_credentials:保存されている認証情報のレコードを一覧表示します。remove_credential:{ "name" }を削除します。ssh_exec:{ "credentialName", "command", "timeout" }を使ってシェルコマンドを実行します。ssh_exec_raw:argv 形式のコマンド配列を実行します。例:{ "credentialName": "prod", "command": ["grep", "-E", "foo|bar", "/var/log/app.log"] }。scp_copy:{ "credentialName", "localPath", "remotePath", "direction" }を使って、SFTP 経由でファイルを 1 つコピーします。rsync_copy:同じ転送形式を使い、rsync でディレクトリや大きなツリーをコピーします。ssh_session_start、ssh_session_send、ssh_session_read、ssh_session_end、ssh_session_list:対話型 SSH セッションを管理します。ssh_tunnel_start、ssh_tunnel_list、ssh_tunnel_stop:ローカルまたはリモートのポートフォワーディングトンネルを管理します。
例:
{
"tool_name": "ssh_exec",
"arguments": {
"credentialName": "prod",
"command": "uptime",
"timeout": 120000
}
}
サーバーの起動
npm start
サーバーは設定されたポートで起動します(デフォルト設定はソースコード内で変更できます)。
CLI の使用方法
CLI は MCP サーバーと同じ ~/ssh.db 資格情報ストアを共有します。リモートでの作業には OpenSSH の多重化接続を使用するため、同じホスト、ユーザー名、鍵を指定した CLI の呼び出しでは、認証済みのトランスポートが再利用されます。まずビルドし、その後 npm run cli -- または npm link の実行後に sshcli バイナリを使って実行します。
npm run build && npm run cli -- <command>
# or, after linking:
npx sshcli <command>
コマンド:
sshcli creds add prod --host 1.2.3.4 --user ubuntu --key ~/.ssh/id_rsa
sshcli creds list
sshcli creds rm prod
sshcli exec prod uptime
sshcli exec prod --timeout 30000 -- df -h /
sshcli exec --raw prod grep -E 'foo|bar' /var/log/app.log
sshcli scp prod ./file.txt /tmp/file.txt toRemote
sshcli rsync prod ./dir/ /tmp/dir/ fromRemote
sshcli session prod # live interactive shell; Ctrl+D or exit to close
sshcli tunnel prod --type local --local-port 8080 --remote-host localhost --remote-port 80
sshcli cache status prod
sshcli cache close prod
注意:
execの可変長引数<command...>は貪欲に処理されるため、--timeoutや--rawなどのオプションはコマンドトークンより前に指定してください。exec、scp、rsync、session、tunnelはすべて同じ接続を再利用します。デフォルトでは、アイドル状態の接続は30分間キャッシュされます。- エンドポイントへの最初の接続試行は、CLI プロセス間で直列化されます。接続に失敗すると、15秒の指数バックオフが適用されます(最大5分)。これにより、レート制限されたホストへの呼び出しの繰り返しを防ぎます。
sessionとtunnelはフォアグラウンドコマンドです。シェルを閉じるか Ctrl+C を押すまで、それぞれ処理がブロックされます。これらのコマンドを終了しても、共有トランスポートは閉じられません。- CLI では session の send/read/end/list コマンドと tunnel の list/stop コマンドを意図的に省略しています。これらのインメモリ状態は、1回限りの CLI 呼び出しをまたいで保持されないためです。代わりに、フォアグラウンドの
sessionコマンドとtunnelコマンドを使用してください。 - キャッシュは
$XDG_RUNTIME_DIR/sshcli/connections(またはユーザーごとのプライベートな一時ディレクトリ)に保存されます。SSHCLI_CONTROL_PERSIST_SECONDS、SSHCLI_RECONNECT_BACKOFF_MS、SSHCLI_RECONNECT_BACKOFF_MAX_MS、またはSSHCLI_CACHE_DIRで調整できます。 - 対応する CLI コマンドを使用するには、OpenSSH、scp、rsync が
PATHから利用できる必要があります。
プロジェクト構成
src/- ソースコードのディレクトリbuild/- コンパイル済み JavaScript の出力先node_modules/- プロジェクトの依存関係
依存関係
@modelcontextprotocol/sdk:MCP プロトコルの実装sqlite3:SQLite データベースドライバーtypescript:TypeScript サポート用の開発依存関係
開発
プロジェクトを変更するには:
src/ディレクトリで変更を加えます- プロジェクトを再ビルドします:
npm run build
- 変更をテストするため、サーバーを起動します:
npm start
ライセンス
MIT
コントリビューション
- リポジトリをフォークします
- 機能ブランチを作成します
- 変更をコミットします
- ブランチにプッシュします
- 新しいプルリクエストを作成します
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。