🚀 MCP SSH Agent
Model Context Protocol (MCP) サーバーで、SSH接続を管理および制御します。このサーバーは、Claude Desktopやその他のMCP互換クライアントとシームレスに統合され、AIによるSSH操作を提供します。
🚀 クイックスタート
npxを使用したインストール (推奨)
npx @aiondadotcom/mcp-ssh
Claude Desktopとの統合
このMCPサーバーをClaude Desktopと一緒に使用するには、MCP設定ファイルに以下の設定を追加します。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"mcp-ssh": {
"command": "npx",
"args": ["@aiondadotcom/mcp-ssh"]
}
}
}
この設定を追加した後、Claude Desktopを再起動します。SSHツールがClaudeとの会話で使用できるようになります。
その他のインストール方法
グローバルインストール
npm install -g @aiondadotcom/mcp-ssh
ローカル開発
git clone https://github.com/aiondadotcom/mcp-ssh.git
cd mcp-ssh
npm install
npm start
✨ 主な機能
- 信頼性の高いSSH: JavaScriptのSSHライブラリではなく、ネイティブの
ssh/scpコマンドを使用します。
- 自動検出: SSH設定ファイルと既知のホストファイルからホストを自動的に検出します。
- 完全なSSHサポート: SSHエージェント、キー、およびすべての認証方法で動作します。
- ファイル操作:
scpを使用してファイルのアップロードとダウンロードが可能です。
- バッチコマンド: 複数のコマンドを順番に実行できます。
- エラーハンドリング: タイムアウトを含む包括的なエラーレポートを行います。
💻 使用例
基本的な使用法
上のスクリーンショットは、MCP SSH Agentの動作を示しており、MCP互換クライアントと統合してシームレスなSSH操作を提供する様子を示しています。
高度な使用法
このスクリーンショットは、MCP SSH AgentがClaudeと統合された様子を示しており、AIアシスタントがMCPプロトコルを介して直接SSH接続を管理し、リモートコマンドを実行できることを示しています。
📚 ドキュメント
機能一覧
エージェントは以下のMCPツールを提供します。
- listKnownHosts() - すべての既知のSSHホストをリストします。
~/.ssh/configのエントリを優先し、次に~/.ssh/known_hostsの追加ホストを表示します。
- runRemoteCommand(hostAlias, command) -
sshを使用してリモートホストでコマンドを実行します。
- getHostInfo(hostAlias) - 特定のホストの詳細な設定を返します。
- checkConnectivity(hostAlias) - ホストへのSSH接続をテストします。
- uploadFile(hostAlias, localPath, remotePath) -
scpを使用してファイルをリモートホストにアップロードします。
- downloadFile(hostAlias, remotePath, localPath) -
scpを使用してファイルをリモートホストからダウンロードします。
- runCommandBatch(hostAlias, commands) - 複数のコマンドを順番に実行します。
設定例
Claude Desktopとの統合
Claude Desktopの設定は次のようになります。
{
"mcpServers": {
"mcp-ssh": {
"command": "npx",
"args": ["@aiondadotcom/mcp-ssh"]
}
}
}
手動サーバー設定
サーバーを手動で実行するか、他のMCPクライアントと統合する場合の設定は次の通りです。
{
"servers": {
"mcp-ssh": {
"command": "npx",
"args": ["@aiondadotcom/mcp-ssh"]
}
}
}
要件
- Node.js 18以上
- SSHクライアントがインストールされている (
sshおよびscpコマンドが使用可能)
- SSH設定ファイル (
~/.ssh/configおよび~/.ssh/known_hosts)
Claude Desktopでの使用方法
設定後、Claudeに次のようなSSH操作を依頼できます。
- "List all my SSH hosts" (すべてのSSHホストをリストする)
- "Check connectivity to my production server" (本番サーバーへの接続を確認する)
- "Run a command on my web server" (Webサーバーでコマンドを実行する)
- "Upload this file to my remote server" (このファイルをリモートサーバーにアップロードする)
- "Download logs from my application server" (アプリケーションサーバーからログをダウンロードする)
ClaudeはMCP SSHツールを使用して、これらの操作を安全かつ効率的に実行します。
実行方法
エージェントはSTDIOを介したModel Context Protocolサーバーとして実行されます。npmでインストールした場合は、直接使用できます。
npx @aiondadotcom/mcp-ssh
mcp-ssh
npm start
サーバーはSTDIOを介してクリーンなJSONで通信するため、Claude DesktopのようなMCPクライアントに最適です。
高度な設定
環境変数
MCP_SILENT=true - デバッグ出力を無効にします (MCPサーバーとして使用する場合は自動的に設定されます)
SSH設定
エージェントは標準のSSH設定ファイルから読み取ります。
~/.ssh/config - SSHクライアントの設定
~/.ssh/known_hosts - 既知のホストキー
SSHキーが適切に設定され、SSHエージェントまたはキーファイルを介してアクセス可能であることを確認してください。
例: ~/.ssh/config
以下は、さまざまな接続シナリオを示すSSH設定ファイルの例です。
# グローバル設定 - 接続を維持する
ServerAliveInterval 55
# ジャンプホストを使用する本番サーバー
Host prod
Hostname 203.0.113.10
Port 22022
User deploy
IdentityFile ~/.ssh/id_prod_rsa
# 本番サーバーへのrootアクセス (別のエントリ)
Host root@prod
Hostname 203.0.113.10
Port 22022
User root
IdentityFile ~/.ssh/id_prod_rsa
# 本番ジャンプホストを介してアクセスするアーカイブサーバー
Host archive
Hostname 2001:db8:1f0:cafe::1
Port 22077
User archive-user
ProxyJump prod
# 特定の設定を持つWebサーバー
Host web1.example.com
Hostname 198.51.100.15
Port 22022
User root
IdentityFile ~/.ssh/id_ed25519
Host web2.example.com
Hostname 198.51.100.25
Port 22022
User root
IdentityFile ~/.ssh/id_ed25519
# カスタムキーを持つデータベースサーバー
Host database
Hostname 203.0.113.50
Port 22077
User dbadmin
IdentityFile ~/.ssh/id_database_rsa
IdentitiesOnly yes
# メールサーバー
Host mail1
Hostname 198.51.100.88
Port 22078
User mailuser
Host root@mail1
Hostname 198.51.100.88
Port 22078
User root
# 監視サーバー
Host monitor
Hostname 203.0.113.100
Port 22077
User monitoring
IdentityFile ~/.ssh/id_monitor_ed25519
IdentitiesOnly yes
# ロードバランサー
Host lb-a
Hostname 198.51.100.200
Port 22077
User root
Host lb-b
Hostname 198.51.100.201
Port 22077
User root
この設定は以下を示しています。
- グローバル設定: 接続を維持するための
ServerAliveInterval
- カスタムポート: セキュリティのための非標準のSSHポート
- 複数のユーザー: 同じホストに対する異なるユーザーアカウント (例:
prodとroot@prod)
- ジャンプホスト: バスティオンホストを介してサーバーにアクセスするための
ProxyJumpの使用
- IPv6アドレス: 最新のネットワーク対応
- アイデンティティファイル: 異なるサーバーに対する特定のSSHキー
- セキュリティオプション: 指定されたキーのみを使用する
IdentitiesOnly yes
MCP SSH Agentが設定を使用する方法
MCP SSHエージェントは、SSH設定を自動的に検出して使用します。
- ホスト検出:
~/.ssh/configのすべてのホストが自動的に使用可能になります。
- ネイティブSSH: システムの
sshコマンドを使用するため、すべての設定オプションが機能します。
- 認証: SSHエージェント、キーファイル、および認証設定を尊重します。
- ジャンプホスト: 複雑なプロキシチェーンとバスティオンホストの設定をサポートします。
- ポート転送: カスタムポートと接続オプションで動作できます。
Claude Desktopでの使用例:
- "List my SSH hosts" (SSHホストをリストする) →
prod、archive、web1.example.comなど、すべての設定されたホストが表示されます。
- "Connect to archive server" (アーカイブサーバーに接続する) → 自動的に
ProxyJump設定が使用されます。
- "Run 'df -h' on web1.example.com" (web1.example.comで'df -h'を実行する) → 正しいユーザー、ポート、およびキーで接続します。
- "Upload file to database server" (データベースサーバーにファイルをアップロードする) → 特定のアイデンティティファイルとポート設定が使用されます。
トラブルシューティング
一般的な問題
- コマンドが見つからない:
sshとscpがインストールされており、PATHに含まれていることを確認してください。
- アクセスが拒否された: SSHキーのパーミッションとSSHエージェントを確認してください。
- ホストが見つからない: ホストが
~/.ssh/configまたは~/.ssh/known_hostsに存在することを確認してください。
- 接続がタイムアウトした: ネットワーク接続とファイアウォール設定を確認してください。
デバッグモード
詳細な動作ログを表示するには、デバッグ出力で実行します。
MCP_SILENT=false npx @aiondadotcom/mcp-ssh
SSHキーの設定ガイド
MCP SSH Agentが正常に動作するには、SSHキー認証を設定する必要があります。以下は完全なガイドです。
1. SSHキーの作成
新しいSSHキーペアを生成します (セキュリティ向上のためにEd25519を使用します)。
ssh-keygen -t ed25519 -C "your-email@example.com"
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
重要: パスフレーズを求められたら、空のままにしてください (Enterキーを押します)。MCP SSH Agentはパスワード保護されたキーを非対話的に実行するため、処理できません。
Enter passphrase (empty for no passphrase): [Press Enter]
Enter same passphrase again: [Press Enter]
これにより、2つのファイルが作成されます。
~/.ssh/id_ed25519 (秘密鍵) - これは秘密にしてください!
~/.ssh/id_ed25519.pub (公開鍵) - これをサーバーにコピーします。
2. リモートサーバーへの公開キーのインストール
公開キーをリモートサーバーのauthorized_keysファイルにコピーします。
ssh-copy-id user@hostname
cat ~/.ssh/id_ed25519.pub | ssh user@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
cat ~/.ssh/id_ed25519.pub
3. サーバー側のSSH設定
SSHサーバーでセキュアなキーのみの認証を有効にするには、/etc/ssh/sshd_configを編集します。
sudo nano /etc/ssh/sshd_config
以下の設定を追加または変更します。
# 公開キー認証を有効にする
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# パスワード認証を無効にする (セキュリティのベストプラクティス)
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
# rootログインオプション (1つを選択):
# オプション1: rootログインをSSHキーのみで許可する (管理者アクセスに推奨)
PermitRootLogin prohibit-password
# オプション2: rootログインを完全に無効にする (最もセキュアですが、柔軟性が低い)
# PermitRootLogin no
# オプション: 特定のユーザーにSSHアクセスを制限する
AllowUsers deploy root admin
# オプション: セキュリティのためにデフォルトポートを変更する
Port 22022
編集後、SSHサービスを再起動します。
sudo systemctl restart ssh
sudo systemctl restart sshd
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load /System/Library/LaunchDaemons/ssh.plist
4. 正しいパーミッションの設定
SSHはファイルパーミッションに非常に厳格です。正しく設定してください。
ローカルマシンでの設定:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 644 ~/.ssh/config
chmod 644 ~/.ssh/known_hosts
リモートサーバーでの設定:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
5. SSHキー認証のテスト
MCP SSH Agentで使用する前に、接続をテストします。
ssh -i ~/.ssh/id_ed25519 user@hostname
ssh -v -i ~/.ssh/id_ed25519 user@hostname
ssh -F ~/.ssh/config hostname
6. 異なるサーバーに対する複数のキー
異なるサーバーに対して異なるキーを作成できます。
ssh-keygen -t ed25519 -f ~/.ssh/id_production -C "production-server"
ssh-keygen -t ed25519 -f ~/.ssh/id_staging -C "staging-server"
次に、~/.ssh/configで設定します。
Host production
Hostname prod.example.com
User deploy
IdentityFile ~/.ssh/id_production
IdentitiesOnly yes
Host staging
Hostname staging.example.com
User deploy
IdentityFile ~/.ssh/id_staging
IdentitiesOnly yes
セキュリティのベストプラクティス
SSHキーのセキュリティ
- MCP SSH Agentではパスワード保護されたキーを使用しないでください。
- 秘密鍵を共有しないでください - それらは自分のマシンにのみ残しておく必要があります。
- 可能な場合はEd25519キーを使用してください (RSAよりもセキュアです)。
- 異なる環境/目的に対して別々のキーを作成してください。
- 定期的にキーをローテーションしてください (6 - 12か月ごと)。
サーバーのセキュリティ
- パスワード認証を完全に無効にしてください。
- 非標準のSSHポートを使用して、自動攻撃を減らしてください。
AllowUsersを使用して、特定のユーザーにSSHアクセスを制限してください。
- 適切なrootログインポリシーを選択してください。
PermitRootLogin prohibit-password - rootアクセスをSSHキーのみで許可します (管理者タスクに推奨)
PermitRootLogin no - rootログインを完全に無効にします (最もセキュアですが、柔軟性が低い)
- すべてのアカウントに対してSSHキーのみの認証を有効にしてください。
- 追加のセキュリティ層としてジャンプホストを使用することを検討してください。
ネットワークのセキュリティ
- 本番サーバーにはVPNまたはバスティオンホストを使用してください。
- fail2banを実装して、ブルートフォース攻撃をブロックしてください。
- 定期的にSSHログを監視してください。
- SSHキー転送を慎重に使用してください (必要でない場合は無効にしてください)。
🔧 技術詳細
プロジェクト構造
mcp-ssh/
├── server-simple.mjs # メインのMCPサーバー実装
├── package.json # 依存関係とスクリプト
├── README.md # ドキュメント
├── LICENSE # MITライセンス
├── CHANGELOG.md # リリース履歴
├── PUBLISHING.md # 公開手順
├── start.sh # 開発用の起動スクリプト
├── start-silent.sh # サイレント起動スクリプト
├── doc/
│ ├── example.png # 使用例のスクリーンショット
│ └── Claude.png # Claude Desktopとの統合例
├── src/ # TypeScriptソースファイル (開発用)
│ ├── ssh-client.ts # SSH操作の実装
│ ├── ssh-config-parser.ts # SSH設定の解析
│ └── types.ts # 型定義
└── tsconfig.json # TypeScriptの設定
概要
このMCPサーバーは、Claude DesktopなどのMCP互換言語モデルが使用できるクリーンで標準化されたインターフェースを介してSSH操作を提供します。サーバーは、~/.ssh/configと~/.ssh/known_hostsファイルからSSHホストを自動的に検出し、最大限の信頼性を得るためにネイティブのSSHツールを使用してコマンドを実行します。
📄 ライセンス
MITライセンス - 詳細はLICENSEファイルを参照してください。
このプロジェクトについて
このプロジェクトは aionda.com によって管理されており、Model Context Protocolを通じてAIアシスタントとSSHインフラストラクチャの間に信頼性の高い架け橋を提供します。