MCP SSH Agent について
MCP SSH Agent は SSH 接続の管理と操作を行う MCP サーバーで、Claude Desktop などの MCP クライアントの利用者を対象としています。~/.ssh/config と ~/.ssh/known_hosts からホストを検出し、システムの ssh と scp を使って操作を実行します。パスワードはローカルの注釈から読み取られ、モデルには渡されません。
主な機能
- 01SSH 設定からのホストの自動検出
- 02ネイティブの ssh および scp コマンドによる操作
- 03scp によるファイルのアップロードとダウンロード
- 04複数コマンドの順次バッチ実行
- 05@password 注釈によるパスワード認証
- 06Include ディレクティブと ProxyJump への対応
活用シーン
- 01Claude Desktop からのホスト一覧表示と接続確認
- 02リモートサーバーでのコマンド実行と出力の確認
- 03設定ファイルのアップロードやアプリケーションログのダウンロード
MCP 対応
本プロジェクトは STDIO で動作する MCP サーバーとして、listKnownHosts、runRemoteCommand、uploadFile など 7 個のツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
7掲載時のツール一覧 · 3 週間前に更新
このツールにパラメーターはありません。
詳細
MCP SSH Agent
SSH 接続を管理および制御するための Model Context Protocol(MCP)サーバーです。このサーバーは Claude Desktop やその他の MCP 対応クライアントとシームレスに連携し、AI を活用した SSH 操作を提供します。
概要
この MCP サーバーは、Claude Desktop のような MCP 対応言語モデルで利用できる、明確で標準化されたインターフェースを通じて SSH 操作を提供します。サーバーは ~/.ssh/config ファイルと ~/.ssh/known_hosts ファイルから SSH ホストを自動検出し、信頼性を最大限に高めるため、ネイティブの SSH ツールを使ってコマンドを実行します。
クイックスタート
MCP バンドルのインストール(推奨)
MCP SSH Agent をインストールする最も簡単な方法は、MCP バンドルとしてインストールすることです。
- GitHub リリースページから最新の
mcp-ssh-*.mcpbファイルをダウンロードします .mcpbファイルをダブルクリックして、Claude Desktop にインストールします
バンドル形式は以前、Desktop Extension と呼ばれ、
.dxt拡張子を使用していました。v1.3.9 では移行期間中に両方のファイルが提供され、それ以降のリリースでは.mcpbのみが含まれます。Claude Desktop が古く、.mcpbファイルを受け付けない場合は、 アップデートするか、以下のインストール方法を使用してください。
- SSH ツールが Claude との会話で自動的に利用可能になります
代替のインストール方法
npx でのインストール
npx @aiondadotcom/mcp-ssh
Claude Desktop の手動設定
Claude Desktop でこの MCP サーバーを手動設定して使用するには、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 # also compiles src/ -> dist/
npm start
サーバーは src/ 内の TypeScript で実装されており、npm install でビルドされます。ソースを編集した後は、
npm run build を実行してください(または、src/ を直接読み込む npm test を実行してください)。
使用例

上のスクリーンショットは MCP SSH Agent の動作を示しており、MCP 対応クライアントと連携して SSH 操作をシームレスに提供する様子を確認できます。
Claude との連携

このスクリーンショットは Claude と連携した MCP SSH Agent を示しており、AI アシスタントが MCP プロトコルを通じて SSH 接続を直接管理し、リモートコマンドを実行する様子を確認できます。
主な機能
- 信頼性の高い SSH:JavaScript の SSH ライブラリではなく、ネイティブの
ssh/scpコマンドを使用します - 自動検出:SSH 設定ファイルと known_hosts ファイルからホストを検出します
- SSH の完全サポート:SSH エージェント、鍵、あらゆる認証方式に対応しています
- パスワード認証:
@passwordアノテーションを使ったパスワードによる SSH ログインと鍵のパスフレーズに対応しています。パスワードがマシンの外部に送信されることはありません - ファイル操作:
scpを使ってファイルをアップロードおよびダウンロードします - バッチコマンド:複数のコマンドを順番に実行します
- エラー処理:タイムアウトを含む包括的なエラー報告を行います
関数
エージェントは以下の 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) - ファイルをリモートホストからダウンロードします
- 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 20 以上
- SSH クライアントがインストールされていること(
sshおよびscpコマンドが使用可能であること) - SSH 設定ファイル(
~/.ssh/configおよび~/.ssh/known_hosts)
Claude Desktop での使用方法
設定が完了したら、次のような SSH 操作について Claude に依頼できます。
- 「SSH ホストをすべて一覧表示して」
- 「本番サーバーへの接続を確認して」
- 「ウェブサーバーでコマンドを実行して」
- 「このファイルをリモートサーバーにアップロードして」
- 「アプリケーションサーバーからログをダウンロードして」
Claude は MCP SSH ツールを使用して、これらの操作を安全かつ効率的に実行します。
使用方法
このエージェントは、STDIO を介して Model Context Protocol サーバーとして実行されます。npm 経由でインストールすると、直接使用できます。
# Run via npx (recommended)
npx @aiondadotcom/mcp-ssh
# Or if installed globally
mcp-ssh
# For development - run with debug output
npm start
サーバーは STDIO 経由でクリーンな JSON を使って通信するため、Claude Desktop などの MCP クライアントに最適です。
詳細設定
環境変数
MCP_SILENT=true- デバッグ出力を無効にします(MCP サーバーとして使用する場合は自動的に設定されます)
SSH 設定
エージェントは標準の SSH 設定ファイルを読み取ります。
~/.ssh/config- SSH クライアントの設定(Include ディレクティブをサポート)~/.ssh/known_hosts- 既知のホスト鍵
SSH 鍵が正しく設定され、SSH エージェントまたは鍵ファイルからアクセスできることを確認してください。
パスワード認証
ネットワーク機器(スイッチやルーターなど)でよく使われる、パスワード認証が必要なホストの場合は、専用のコメント注釈を使って、パスワードを ~/.ssh/config に直接保存できます。
Host myrouter
HostName 192.168.1.1
User admin
# @password:yourSecretPassword
Host myserver
HostName 10.0.0.5
User deploy
IdentityFile ~/.ssh/id_rsa
# @password:myKeyPassphrase
仕組み:
# @password:注釈は MCP サーバーによってローカルで読み取られます。パスワードが AI モデルやクラウドプロバイダーに送信されることはありません。- ログインパスワードと SSH 鍵のパスフレーズの両方に対応しています。
- パスワードは最初の
:で分割されるため、パスワードに:が含まれていても使用できます。 - ホスト一覧には
passwordAuth: trueのみが表示され、実際のパスワードが公開されることはありません。
セキュリティ要件:
@password注釈を使用する場合、SSH 設定ファイルの権限は600にする必要があります。- ファイルの権限が緩すぎる場合、MCP サーバーは起動を拒否します。
- 次のコマンドで修正してください:
chmod 600 ~/.ssh/config
Include ディレクティブのサポート
MCP SSH Agent は、設定を複数のファイルに整理するための SSH Include ディレクティブを完全にサポートしています。ただし、注意すべき SSH の重要なバグがあります。
⚠️ SSH Include ディレクティブのバグに関する警告
SSH には設定の解析にバグがあり、Include 文が正しく機能するには、~/.ssh/config ファイルの先頭に配置する必要があります。末尾に配置すると、SSH はそれらを読み込みますが、インクルードされた設定を正しく適用しません。
✅ 正しい配置(先頭):
# ~/.ssh/config
Include ~/.ssh/config.d/*
Include ~/.ssh/work-hosts
# Global settings
ServerAliveInterval 55
# Host definitions
Host myserver
HostName example.com
❌ 誤った配置(末尾)— 機能しません:
# ~/.ssh/config
# Global settings
ServerAliveInterval 55
# Host definitions
Host myserver
HostName example.com
# These Include statements won't work properly due to SSH bug:
Include ~/.ssh/config.d/*
Include ~/.ssh/work-hosts
MCP SSH Agent は、ファイル内の配置にかかわらず Include ディレクティブを正しく処理するため、SSH 自体に設定上の問題があっても、ホストを完全に検出できます。
~/.ssh/config の例
Include ディレクティブや、パスワード認証用の @password 注釈など、さまざまな接続シナリオを示す SSH 設定ファイルの例です。
# Include directives must be at the beginning due to SSH bug
Include ~/.ssh/config.d/*
Include ~/.ssh/work-servers
# Global settings - keep connections alive
ServerAliveInterval 55
# Production server with jump host
Host prod
Hostname 203.0.113.10
Port 22022
User deploy
IdentityFile ~/.ssh/id_prod_rsa
# Root access to production (separate entry)
Host root@prod
Hostname 203.0.113.10
Port 22022
User root
IdentityFile ~/.ssh/id_prod_rsa
# Router with password authentication (no SSH key)
Host router
Hostname 192.168.1.1
User admin
# @password:cQbG0q@019TAoehZel7V
# Archive server accessed through production jump host
Host archive
Hostname 2001:db8:1f0:cafe::1
Port 22077
User archive-user
ProxyJump prod
# Web servers with specific configurations
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
# Database server with custom key and passphrase-protected key
Host database
Hostname 203.0.113.50
Port 22077
User dbadmin
IdentityFile ~/.ssh/id_database_rsa
IdentitiesOnly yes
# @password:U1Jqn=NoKdELYn&h1jVT
# Mail servers (password auth, no SSH key)
Host mail1
Hostname 198.51.100.88
Port 22078
User mailuser
# @password:7iBiV8lyoq*zANv46ALD
Host root@mail1
Hostname 198.51.100.88
Port 22078
User root
# @password:MRDHI2h!zhhN=ZJIxWzH
# Monitoring server
Host monitor
Hostname 203.0.113.100
Port 22077
User monitoring
IdentityFile ~/.ssh/id_monitor_ed25519
IdentitiesOnly yes
# Load balancers
Host lb-a
Hostname 198.51.100.200
Port 22077
User root
Host lb-b
Hostname 198.51.100.201
Port 22077
User root
# One host reachable under several aliases - both names work
Host docker-lxc hlab
Hostname 10.9.0.105
User root
この設定では、次の内容を示しています。
- グローバル設定:接続を維持するための
ServerAliveInterval - カスタムポート:セキュリティ向上のための標準外の SSH ポート
- 複数ユーザー:同じホストに対する異なるユーザーアカウント(例:
prodとroot@prod) - 複数のエイリアス:1つのホストを複数の名前で宣言(例:
docker-lxc hlab) — それぞれの名前で接続できます - ジャンプホスト:
ProxyJumpを使って踏み台ホスト経由でサーバーにアクセス - IPv6 アドレス:最新のネットワーク機能への対応
- ID ファイル:サーバーごとに指定する SSH キー
- セキュリティオプション:指定したキーのみを使用する
IdentitiesOnly yes - パスワード認証:SSH キーに対応していないデバイス(ルーター、スイッチなど)やパスフレーズで保護されたキー用の
# @password:注釈
検出されるホスト
listKnownHosts() は、~/.ssh/config で見つかった接続可能なホスト(Include で読み込まれるものを含む)をすべて報告し、その後に ~/.ssh/known_hosts から追加のホスト名を報告します。接続可能なホストに該当するかどうかは、次の3つのルールで判断されます。
複数エイリアスを持つブロックは、すべてのエイリアスで利用できます。 Host には単一の名前ではなくパターンのリストを指定するため、1つのブロックで複数のエイリアスを宣言できます。
Host docker-lxc hlab
Hostname 10.9.0.105
User root
docker-lxc と hlab のどちらからでも、このホストに接続できます。レスポンスの aliases フィールドにはすべてのエイリアスが含まれ、alias には最初のエイリアスが格納されます。
デフォルト設定のブロックは除外されます。 パターンがワイルドカードと否定のみのブロックは、ほかのホストのデフォルトを設定するものであり、それ自体には接続できないため、ホストのリストから除外されます。
Host *
ServerAliveInterval 55
Host * !bastion # "everything except bastion" — a defaults block, not a host
User deploy
IdentityFile ~/.ssh/id_deploy
(OpenSSH では ! を使ってパターンを否定できます。否定パターンが一致すると行全体が無効になるため、否定はワイルドカードの例外としてのみ意味を持ちます。)
Hostname のないホストは除外されます。接続先が存在しないためです。
ServerAliveInterval 55 のようなトップレベルの単独ディレクティブは、ssh 自体の設定であり、ホストの検出では無視されます。すべての操作はシステムの ssh バイナリを通じて実行されるため、ssh では引き続き適用されます。
MCP SSH Agent による設定の利用方法
MCP SSH エージェントは、SSH 設定を自動的に検出して使用します。
- ホストの検出:
~/.ssh/configにある接続可能なホストはすべて利用できます。上記のルールを参照してください - ネイティブ SSH:システムの
sshコマンドを使用するため、すべての設定オプションが機能します - 認証:SSH エージェント、キーファイル、認証設定を使用します
- ジャンプホスト:複雑なプロキシチェーンや踏み台ホストの構成に対応します
- ポートフォワーディング:カスタムポートや接続オプションを使用できます
Claude Desktop での使用例:
- 「SSH ホストの一覧を表示して」→
prod、archive、web1.example.comなど、設定済みのホストをすべて表示します - 「archive サーバーに接続して」→
ProxyJumpの設定を自動的に使用します - 「web1.example.com で 'df -h' を実行して」→ 正しいユーザー、ポート、キーを使って接続します
- 「データベースサーバーにファイルをアップロードして」→ 指定された ID ファイルとポートの設定を使用します
トラブルシューティング
よくある問題
- コマンドが見つからない:
sshとscpがインストールされ、PATH に含まれていることを確認してください - アクセスが拒否される:SSH キーの権限と SSH エージェントを確認してください
- ホストが見つからない:ホストが
~/.ssh/configまたは~/.ssh/known_hostsに存在し、そのブロックにHostnameが設定されていることを確認してください。Hostnameのないブロックや、Host *のようなデフォルトのみのブロックは、接続可能なホストではありません。検出されるホストを参照してください - 接続がタイムアウトする:ネットワーク接続とファイアウォールの設定を確認してください
- Windows:すべてのコマンドが終了コード 255 で失敗し、出力がない:1.3.8 以降で修正されています。それ以前のバージョンでは、MCP ホストから引き継ぐ環境から
%ProgramData%が除外されており、Win32-OpenSSH の起動に必要なこの環境変数が設定されません。アップグレードするか、クライアント設定のenvブロックに"ProgramData": "C:\\ProgramData"を追加してください
デバッグモード
詳細な操作ログを確認するには、デバッグ出力を有効にして実行してください。
# Enable debug mode
MCP_SILENT=false npx @aiondadotcom/mcp-ssh
SSH キーの設定ガイド
MCP SSH Agent を正しく動作させるには、SSH キー認証を設定する必要があります。以下に手順をすべて示します。
1. SSH キーの作成
新しい SSH キーペアを生成します(セキュリティを高めるには Ed25519 を使用してください)。
# Generate Ed25519 key (recommended)
ssh-keygen -t ed25519 -C "[email protected]"
# Or generate RSA key (if Ed25519 is not supported)
ssh-keygen -t rsa -b 4096 -C "[email protected]"
重要:パスフレーズを求められたら、空欄のままにしてください(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 ファイルにコピーします。
# Method 1: Using ssh-copy-id (easiest)
ssh-copy-id user@hostname
# Method 2: Manual copy
cat ~/.ssh/id_ed25519.pub | ssh user@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
# Method 3: Copy and paste manually
cat ~/.ssh/id_ed25519.pub
# Then SSH to the server and paste into ~/.ssh/authorized_keys
3. サーバー側の SSH 設定
SSH サーバーで安全な鍵のみの認証を有効にするには、/etc/ssh/sshd_config を編集します。
# Edit SSH daemon configuration
sudo nano /etc/ssh/sshd_config
次の設定を追加または変更します。
# Enable public key authentication
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# Disable password authentication (security best practice)
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
# Root login options (choose one):
# Option 1: Allow root login with SSH keys only (recommended for admin access)
PermitRootLogin prohibit-password
# Option 2: Completely disable root login (most secure, but less flexible)
# PermitRootLogin no
# Optional: Restrict SSH to specific users
AllowUsers deploy root admin
# Optional: Change default port for security
Port 22022
編集後、SSH サービスを再起動します。
# On Ubuntu/Debian
sudo systemctl restart ssh
# On CentOS/RHEL/Fedora
sudo systemctl restart sshd
# On macOS
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 で使用する前に、接続をテストしてください。
# Test connection
ssh -i ~/.ssh/id_ed25519 user@hostname
# Test with verbose output for debugging
ssh -v -i ~/.ssh/id_ed25519 user@hostname
# Test specific configuration
ssh -F ~/.ssh/config hostname
6. サーバーごとに異なるキーを使用する
サーバーごとに異なるキーを作成できます。
# Create specific keys
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
脅威モデルと信頼境界
MCP SSH Agent は、LLM がユーザーに代わって ssh と scp を操作できるようにします。使用する前に、LLM の指示を制御する攻撃者(たとえば、ウェブページ、メール、リポジトリファイル、または別の MCP サーバーの出力を通じたプロンプトインジェクション)に何ができるのかを理解することが重要です。
runRemoteCommandは、設定済みのすべてのホストで完全なリモートコード実行を可能にします。~/.ssh/configにproductionのエントリがある場合、LLM はそのホスト上でそのユーザーとして任意のコマンドを実行できます。これはツールの目的であり、バグではありません。ただし、LLM に操作させてもよいホストだけを設定し、最小権限のアカウントを優先する必要があります。uploadFileとdownloadFileにより、LLM は MCP サーバーを実行するユーザーの権限でローカルファイルシステムにアクセスできます。 LLM はプロセスが読み取れるあらゆるファイル(~/.ssh/id_*、ブラウザーデータ、ソースツリー、.envファイルなど)を読み取り、書き込み可能なあらゆるパス(~/.ssh/authorized_keysなど)に書き込めます。パス引数はサンドボックス化されていません。これは、このツールの契約が「任意のファイルを転送すること」だからです。- MCP サーバーは STDIO 経由でローカル実行されますが、LLM は信頼できません。 STDIO が示すのはトランスポートだけです。ツール引数の内容はモデルが選択し、会話中に取り込むあらゆる信頼できないテキストによって、そのモデルの挙動が誘導される可能性があります。
# @password:注釈は LLM のコンテキストには含まれませんが、ディスク上の~/.ssh/configに保存されています。攻撃者が任意のローカルファイルを読み取れるようになると(上記参照)、これらのパスワードも漏えいします。この注釈が防ぐのは、MCP プロトコル経由で LLM にパスワードが見えることだけであり、ローカルファイルの漏えいではありません。
推奨事項
- MCP SSH Agent は、SSH 設定ファイルと、LLM に使用させてもよい鍵だけがホームディレクトリに含まれる、専用の非特権 OS ユーザーで実行してください。
- または、最小限の
~/.sshを備え、マシン上の他のシークレットにアクセスできないコンテナー/サンドボックス内で実行してください。 ~/.ssh/configに登録するホストは、LLM に任せてもよい最小限のものにしてください。可能であれば、リモート側では制限付きシェルユーザーを使用してください。- LLM が信頼できないコンテンツ(ウェブページ、メール、サードパーティーのリポジトリ、他の MCP サーバーの出力)を取り込むセッションでは、MCP SSH 操作に対して悪意ある入力が行われる可能性があるものとして扱ってください。
- 脆弱性が疑われる場合は、このリポジトリの GitHub の非公開脆弱性報告機能から報告してください。
セキュリティのベストプラクティス
SSH 鍵のセキュリティ
- MCP SSH Agent では、パスワードで保護された鍵を使用しないでください
- 秘密鍵を共有しないでください。秘密鍵は自分のマシンだけに保管してください
- 可能であれば Ed25519 鍵を使用してください(RSA より安全です)
- 環境や用途ごとに個別の鍵を作成してください
- 鍵を定期的にローテーションしてください(6~12 か月ごと)
サーバーのセキュリティ
- パスワード認証を完全に無効にしてください
- 自動化された攻撃を減らすため、標準以外の SSH ポートを使用してください
AllowUsersを使って、特定のユーザーだけに SSH アクセスを制限してください- 適切な root ログインポリシーを選択してください:
PermitRootLogin prohibit-password- SSH 鍵による root アクセスのみを許可します(管理タスクに推奨)PermitRootLogin no- root ログインを完全に無効にします(最も安全ですが、sudo アクセスが必要です)
- すべてのアカウントで SSH 鍵のみの認証を有効にしてください
- セキュリティをさらに強化するため、踏み台ホストの使用を検討してください
ネットワークのセキュリティ
- 本番サーバーには VPN または踏み台ホストを使用してください
- 総当たり攻撃をブロックするため、fail2ban を導入してください
- SSH ログを定期的に監視してください
- SSH 鍵の転送は慎重に使用してください(不要な場合は無効にしてください)
MCP Bundle のビルド
ローカルでバンドルをビルドする開発者向け:
前提条件
- Node.js 20 以降
- npm
ビルド
npm install
npm run build:mcpb
これにより、Claude Desktop にインストールできる build/mcp-ssh-<version>.mcpb が作成されます。
バンドルは、本番用の依存関係のみを含むステージング用コピーからパッケージ化されるため、テストツールチェーンとビルドツールチェーンは含まれません。manifest.json と package.json のバージョンが一致しない場合、ビルドは実行されません。
リリースの公開
npm run build:mcpb
gh release upload v1.3.9 build/mcp-ssh-1.3.9.mcpb
貢献
貢献を歓迎します!お気軽にプルリクエストをお送りください。
npm install # also compiles src/ -> dist/ via the prepare script
npm run build # tsc
npm run typecheck # tsc --noEmit, strict for src/ and relaxed for tests
npm run lint # eslint with type-aware rules
npm test # vitest with coverage
npm run test:watch # watch mode
サーバーは src/ 内の TypeScript で記述され、dist/ にコンパイルされます。bin/mcp-ssh.js はこのファイルを読み込み、npm に公開されます。dist/ は git に含まれていません。新しくチェックアウトすると、npm install によって取得されます。
プルリクエストを送る前に、次の 3 点をご確認ください。
- カバレッジはビルドの必須条件です。
vitest.config.mjsでは、src/のステートメント、分岐、関数、行のカバレッジを 100% に設定しているため、テストされていない行を追加すると CI に失敗します。分岐が実際に到達不能な場合は、しきい値を回避するよりも削除するほうが一般的には適切です。 - Lint ルールは標準設定ではなく、調整されています。 ルールを緩和している場合は、その理由が近くのコメントに記されています。特に
prefer-nullish-coalescingでは、文字列と数値を意図的に除外しています。環境変数(ランチャーによって環境が削除されている場合は空文字列が返されます。issue #10 を参照)やtimeout || DEFAULTでは、||と??は同じ意味ではありません。 - CI は Node 20、22、24 において Linux と Windows で実行されます。 OS に依存するコードパスは、いずれかの OS でテストをスキップするのではなく、
process.platformを偽装してモジュールを再インポートすることでテストされます。src/test-helpers.tsのloadServerAs()を参照してください。
ライセンス
MIT License - 詳細は LICENSE ファイルをご覧ください。
プロジェクト構成
mcp-ssh/
├── src/ # TypeScript sources
│ ├── server.ts # Entry point: MCP server wiring and main()
│ ├── tools.ts # Tool definitions and dispatch
│ ├── ssh-client.ts # All ssh/scp operations
│ ├── ssh-config-parser.ts # Host discovery from config and known_hosts
│ ├── config-values.ts # ssh-config value normalization
│ ├── platform.ts # Platform detection, binary resolution, logging
│ ├── types.ts # Shared types
│ └── server.test.ts # Test suite (vitest)
├── dist/ # Compiled output (generated, not in git)
├── bin/
│ └── mcp-ssh.js # Executable entry point (loads dist/server.js)
├── tsconfig.json # Strict compiler options for src/
├── tsconfig.build.json # Build config (excludes tests)
├── tsconfig.test.json # Relaxed options for test files
├── eslint.config.mjs # typescript-eslint, type-aware rules
├── vitest.config.mjs # Test and coverage configuration
├── manifest.json # MCP Bundle manifest
├── package.json # Dependencies and scripts
├── README.md # Documentation
├── LICENSE # MIT License
├── CHANGELOG.md # Release history
├── PUBLISHING.md # Publishing instructions
├── .gitattributes # Forces LF checkout on every platform
├── start.sh # Development startup script
├── start-silent.sh # Silent startup script
├── scripts/
│ └── build-mcpb.sh # MCP Bundle build script
└── doc/ # Documentation assets
├── example.png # Usage example screenshot
└── Claude.png # Claude Desktop integration example
概要
このプロジェクトは aionda.com によって保守されており、Model Context Protocol を通じて AI アシスタントと SSH インフラストラクチャをつなぐ、信頼性の高いブリッジを提供します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。