mcpField
S
SSH MCP Server

SSH MCP Server

ローカル
github.com/KinoThe-Kafkaesque開発ツール111 日前に更新

SSH MCP Server について

SSH MCP Server は、MCP 経由でリモートサーバーへの SSH 操作を提供します。エージェントによるコマンド実行、ファイル転送、セッション管理に対応し、名前付き認証情報を保存して初回接続時にホストキーを検証・固定します。

主な機能

  1. 01SSH 認証情報の保存と管理
  2. 02シェルおよび argv 形式のコマンド実行
  3. 03SCP または rsync によるファイル転送
  4. 04対話型 SSH セッションの管理
  5. 05ポートフォワーディングの開始と管理
  6. 06ホストキーの検証と固定

活用シーン

  1. 01リモートホストでの運用コマンド実行
  2. 02ローカルとリモート間のファイル転送
  3. 03対話型リモートセッションでの作業
  4. 04リモート接続用ポートフォワーディングの設定

MCP 対応

MCP サーバーとして、認証情報管理、SSH コマンド実行、ファイル転送、セッション、トンネルのツールを MCP クライアントに公開し、リモートサーバー操作を可能にします。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"ssh-mcp-server-kinothe-kafkaesque": {
"command": "npx",
"args": [
"-y",
"@smithery/cli"
]
}
}
}
起動コマンドnpx -y @smithery/cli

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@smithery/cli

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

SSH MCP サーバー

smithery badge

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
手動インストール
  1. リポジトリをクローンします:
git clone <repository-url>
cd ssh-server
  1. 依存関係をインストールします:
npm install
  1. プロジェクトをビルドします:
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 サポート用の開発依存関係

開発

プロジェクトを変更するには:

  1. src/ ディレクトリで変更を加えます
  2. プロジェクトを再ビルドします:
npm run build
  1. 変更をテストするため、サーバーを起動します:
npm start

ライセンス

MIT

コントリビューション

  1. リポジトリをフォークします
  2. 機能ブランチを作成します
  3. 変更をコミットします
  4. ブランチにプッシュします
  5. 新しいプルリクエストを作成します

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。