ssh について
SSH 経由でリモートサーバーを管理する MCP サーバーです。パスフレーズで保護された鍵を扱う方向けで、SSH エージェント認証に対応しています。秘密鍵はエージェント内に留まり、サーバーからは読み取られません。
主な機能
- 01パスフレーズ付き鍵に対応する SSH エージェント認証
- 02予備の認証方式としての秘密鍵ファイル
- 03起動時の SSH 接続ヘルスチェック
- 04リモートコマンド実行と SFTP ファイル転送
- 05ツールグループによる操作の制限
活用シーン
- 01MCP クライアントからリモートサーバーでコマンドを実行
- 02SFTP によるデプロイファイルのアップロードとダウンロード
- 03読み取り専用モードでのリモートディレクトリの閲覧
MCP 対応
本プロジェクトは MCP サーバーであり、ssh_execute、ssh_upload、ssh_download、ssh_list_directory ツールと ssh://config リソースを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y ssh-agent-mcp-serverSSH_HOSTHostname or IP address of the SSH server.SSH_USERNAMEUsername for SSH authentication.SSH_PORTSSH port number.SSH_AUTH_SOCKシークレットPath to SSH agent socket for agent-based authentication.SSH_PRIVATE_KEY_PATHシークレットPath to private key file for direct key authentication.SSH_PASSPHRASEシークレットPassphrase for encrypted private key.SSH_TIMEOUTConnection timeout in milliseconds.SSH_COMMAND_TIMEOUTDefault command activity timeout in milliseconds.ENABLED_TOOLGROUPSComma-separated list of tool groups to enable (readonly, write, admin).SKIP_HEALTH_CHECKSSkip SSH connection health check on startup.HEALTH_CHECK_TIMEOUTHealth check timeout in milliseconds.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
SSH MCP サーバー
SSH エージェント認証に対応した、SSH リモートサーバー管理用の MCP(Model Context Protocol)サーバーです。
このサーバーは、パスフレーズで保護された SSH キーに対応していないという、SSH MCP サーバーによくある問題を解決します。SSH エージェント認証を使用することで、キーのパスフレーズを公開せずにリモートサーバーへ安全に接続できます。
主な機能
- SSH エージェント認証 - SSH エージェント経由で、パスフレーズで保護された SSH キーをシームレスに使用できます
- 秘密鍵ファイルのサポート - 秘密鍵ファイルを直接使用する認証方法も利用できます
- 起動時のヘルスチェック - 起動時に SSH 接続を検証し、明確なエラーメッセージを表示します
- コマンド実行 - リモートサーバーでシェルコマンドを実行します
- ファイル転送 - SFTP 経由でファイルをアップロードおよびダウンロードします
- ディレクトリ一覧表示 - リモートのファイルシステムを参照します
- ツールグループ - 利用可能なツールを制御します(readonly、write、admin)
認証の優先順位
このサーバーは複数の認証方法に対応しており、次の順序で使用します。
- SSH エージェント(推奨) -
SSH_AUTH_SOCKが設定されているか、自動検出された場合 - 秘密鍵ファイル -
SSH_PRIVATE_KEY_PATHが設定されている場合
両方の方法を同時に設定できます。SSH エージェント認証が利用可能な場合は、そちらが優先されます。秘密鍵ファイルによる認証は、フォールバックとして、またはエージェントを利用できない場合に使用されます。
機能
ツール
| ツール | グループ | 説明 |
|---|---|---|
ssh_connection_info | readonly、write、admin | 設定済みの SSH 接続情報を取得します |
ssh_list_directory | readonly、write、admin | リモートサーバー上のディレクトリの内容を一覧表示します |
ssh_download | readonly、write、admin | SFTP 経由でリモートサーバーからファイルをダウンロードします |
ssh_upload | write、admin | SFTP 経由でリモートサーバーにファイルをアップロードします |
ssh_execute | admin | リモートサーバーでシェルコマンドを実行します |
リソース
| リソース | 説明 |
|---|---|
ssh://config | SSH 接続の設定とステータス(デバッグ用) |
ツールグループ
ENABLED_TOOLGROUPS 環境変数を使用して、利用可能なツールを制御します。
| グループ | 説明 |
|---|---|
readonly | 安全な操作(接続情報、一覧表示、ダウンロード) |
write | ファイルの変更(アップロード) |
admin | コマンド実行を含むすべての操作 |
例:
ENABLED_TOOLGROUPS="readonly"- 参照とダウンロードのみを許可しますENABLED_TOOLGROUPS="readonly,write"- ファイル転送を許可しますが、コマンド実行は許可しません- 未設定 - すべてのツールを有効にします(デフォルト)
起動時のヘルスチェック
サーバーは起動時に SSH 接続のヘルスチェックを実行し、設定された認証情報とホストが有効であることを確認します。これにより、ワークフロー中に問題が判明するのではなく、設定に問題があればすぐに把握できます。
利点:
- 迅速なフィードバック:設定エラーをワークフローの途中ではなく、起動時に検出できます
- 明確なエラーメッセージ:起動に失敗した場合、よくある問題に対するヒントが表示されます
- ユーザーエクスペリエンスの向上:サーバーの稼働状況に関する曖昧さを解消します
設定:
SKIP_HEALTH_CHECKS=true- ヘルスチェックをスキップします(遅延接続を行う場合に便利です)HEALTH_CHECK_TIMEOUT=10000- ヘルスチェックのタイムアウトを設定します(デフォルト:10 秒)
次の問題に対するヒントが表示されます:
- 認証エラー(SSH キーが読み込まれていない、キーが間違っている)
- 接続タイムアウト(ホストに到達できない)
- 接続拒否(SSH サーバーが起動していない)
- DNS 解決エラー(ホスト名が無効)
クイックスタート
インストール
npx ssh-agent-mcp-server
または、グローバルにインストールします。
npm install -g ssh-agent-mcp-server
設定
環境変数
| 変数 | 必須 | 説明 | デフォルト |
|---|---|---|---|
SSH_HOST | はい | SSH サーバーのホスト名または IP アドレス | - |
SSH_USERNAME | はい | SSH 認証に使用するユーザー名 | - |
SSH_PORT | いいえ | SSH ポート番号 | 22 |
SSH_AUTH_SOCK | いいえ | SSH エージェントソケットへのパス | 自動検出 |
SSH_PRIVATE_KEY_PATH | いいえ | 秘密鍵ファイルへのパス | - |
SSH_PASSPHRASE | いいえ | 暗号化された秘密鍵のパスフレーズ | - |
SSH_TIMEOUT | いいえ | 接続タイムアウト(ミリ秒) | 30000 |
SSH_COMMAND_TIMEOUT | いいえ | コマンドのデフォルトアクティビティタイムアウト(ミリ秒) | 60000 |
ENABLED_TOOLGROUPS | いいえ | カンマ区切りのツールグループ | すべて有効 |
SKIP_HEALTH_CHECKS | いいえ | 起動時の SSH 接続ヘルスチェックをスキップする | false |
HEALTH_CHECK_TIMEOUT | いいえ | ヘルスチェックのタイムアウト(ミリ秒) | 10000 |
Claude Desktop の設定
macOS:~/Library/Application Support/Claude/claude_desktop_config.json
Windows:%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"ssh": {
"command": "npx",
"args": ["-y", "ssh-agent-mcp-server"],
"env": {
"SSH_HOST": "192.168.1.100",
"SSH_USERNAME": "deploy",
"SSH_AUTH_SOCK": "${SSH_AUTH_SOCK}"
}
}
}
}
Claude Desktop を再起動すれば、準備完了です!
SSH エージェント認証(推奨)
パスフレーズで保護された鍵には、SSH エージェント認証の使用を推奨します。
-
SSH エージェントが起動しており、鍵が読み込まれていることを確認します。
# Check if agent is running ssh-add -l # If not, add your key ssh-add ~/.ssh/id_ed25519 -
SSH_AUTH_SOCK環境変数を MCP サーバーに渡します
サーバーは認証にエージェントを自動的に使用し、パスフレーズで保護された鍵はエージェント内で安全に保たれます。
仕組み
- パスフレーズで保護された鍵を
ssh-addで SSH エージェントに読み込みます - エージェントは
$SSH_AUTH_SOCKに Unix ソケットを公開します - この MCP サーバーは
ssh2ライブラリを介してそのソケットに接続します - エージェントは復号済みの鍵を使用して認証チャレンジに署名します
- 秘密鍵がエージェントの外に出ることはなく、MCP サーバーが秘密鍵を見ることもありません
これは、以下の方法よりも安全です。
- パスフレーズを環境変数に保存する
- 保護されていない秘密鍵を使用する
- パスフレーズを手動で入力する
ツールの詳細
ssh_execute
リモートサーバーでコマンドを実行します。
パラメーター:
command(必須):実行するシェルコマンドcwd(任意):作業ディレクトリtimeout(任意):アクティビティタイムアウト(ミリ秒。デフォルト:60000 またはSSH_COMMAND_TIMEOUT)
アクティビティベースのタイムアウト:
タイムアウトは絶対時間ではなく、アクティビティに基づきます。コマンドから stdout または stderr の出力を受信するたびにリセットされます。これにより、定期的に出力を生成する長時間実行コマンド(ビルド、デプロイ、claude -p コマンドなど)は正常に完了できる一方、アクティビティがなく停止したコマンドは引き続きタイムアウトします。
最初の出力まで時間がかかるコマンド(出力まで 10~30 秒以上かかる場合)では、次の方法を使用できます。
SSH_COMMAND_TIMEOUT環境変数でデフォルトのタイムアウトを延長します- 特定のコマンドに、より大きな
timeoutパラメーターを渡します
例:
{
"command": "ls -la /var/log",
"cwd": "/home/user"
}
長時間実行コマンドのタイムアウトを延長する例:
{
"command": "npm run build",
"timeout": 300000
}
戻り値: stdout、stderr、終了コードを含む JSON
ssh_upload
SFTP 経由でリモートサーバーにファイルをアップロードします。
パラメーター:
localPath(必須):ローカルファイルの絶対パスremotePath(必須):サーバー上の保存先パス
ssh_download
SFTP 経由でリモートサーバーからファイルをダウンロードします。
パラメーター:
remotePath(必須):リモートサーバー上のパスlocalPath(必須):ローカルの保存先パス
ssh_list_directory
リモートサーバー上のディレクトリの内容を一覧表示します。
パラメーター:
path(必須):一覧表示するディレクトリのパス
戻り値: ファイル名、種類、サイズ、権限、更新日時を含む JSON 配列
ssh_connection_info
設定済みの SSH 接続に関する情報を取得します。
戻り値: ホスト、ポート、ユーザー名、認証情報を含む JSON
開発
# Install dependencies
npm run install-all
# Build
npm run build
# Run in development mode
npm run dev
# Run tests
npm test
npm run test:integration
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。