Ssh について
SshはRust製のSSHクライアントMCPサーバーです。MCP経由でLLMにリモートSSHセッションを管理させたいユーザー向けで、セッション維持、リモートコマンド実行、ポート転送に対応します。
主な機能
- 01SSHサーバーへの接続とセッション管理
- 02リモートホストでのコマンド実行
- 03SSHポート転送の設定
- 04アクティブなセッションの一覧表示と切断
活用シーン
- 01MCP経由でのSSH接続
- 02リモートホストでのコマンド実行
- 03ローカルポートからリモートサービスへの転送
MCP 対応
SSH接続、コマンド実行、セッション管理、ポート転送をMCPクライアントに公開します。DockerまたはCargoでインストールできます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
SSH-MCP Server
Model Context Protocol(MCP)と統合したSSHクライアントサーバーのRust実装です。LLMがSSHサーバーに接続し、SSHの機能を利用できます。
軽量かつ効率的:
- 🚀
ssh-mcp:バイナリサイズはわずか4.3MB、メモリ使用量は1.8MB - 🔄
ssh-mcp-stdio:バイナリサイズはわずか1.5MB、メモリ使用量は2.3MB - 🐳
docker:最終イメージサイズはわずか27.5MB
特徴
- SSHクライアント統合:MCPコマンドを使ってSSHサーバーに接続します
- SSHコマンドの実行:リモートSSHサーバーでコマンドを実行します
- ポートフォワーディング:SSHトンネルとポートフォワーディングを設定します(
port_forward機能によりデフォルトで有効です) - セッション管理:複数のSSHセッションを追跡、管理します
- MCPプロトコルのサポート:AI/LLMとの互換性を実現するため、poem-mcpserverを使用して構築されています
- ステートフル接続:複数のコマンドにわたってSSHセッションを維持します
インストールと統合
インストール方法は2つあります。
オプション1:Dockerを使用する(推奨)
Rustツールチェーンは不要です。Dockerだけで使用できます!
# Pull the pre-built image from Docker Hub
docker pull mingyang91/ssh-mcp
# Run the server
docker run -p 8000:8000 mingyang91/ssh-mcp
または、イメージを自分でビルドします。
# Build the Docker image
docker build -t ssh-mcp .
# Run the server
docker run -p 8000:8000 ssh-mcp
オプション2:Cargoを使用してインストールする
前提条件:
- Rust 1.70.0以降
- Cargoパッケージマネージャー
cargo install ssh-mcp
mcpServersとの統合
SSH-MCPをmcpServersで使用するには、mcpServersのJSON設定に以下の設定を追加します。
Cargo経由でインストールした場合:
{
"mcpServers": {
"ssh": {
"command": "ssh-mcp-stdio",
"args": []
}
}
}
Dockerを使用する場合:
{
"mcpServers": {
"ssh": {
"command": "docker",
"args": ["run", "--entrypoint", "ssh-mcp-stdio", "-i", "--rm", "ssh-mcp"]
}
}
}
これによりSSHハンドラーが登録され、LLMがMCPサーバーを通じてSSH接続を管理できるようになります。
使用方法
SSHサーバーへの接続
パスワード認証を使用する場合
{
"command": "ssh_connect",
"params": {
"address": "example.com:22",
"username": "user",
"password": "password"
}
}
鍵認証を使用する場合
{
"command": "ssh_connect",
"params": {
"address": "example.com:22",
"username": "user",
"key_path": "/path/to/private_key"
}
}
SSHエージェント認証を使用する場合
{
"command": "ssh_connect",
"params": {
"address": "example.com:22",
"username": "user"
}
}
応答:
{
"session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
"message": "Successfully connected to [email protected]:22",
"authenticated": true
}
接続に失敗した場合:
{
"error": "Failed to connect: Connection refused"
}
コマンドの実行
{
"command": "ssh_execute",
"params": {
"session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
"command": "ls -la"
}
}
応答:
{
"stdout": "total 32\ndrwxr-xr-x 5 user group 4096 Jan 1 12:00 .\ndrwxr-xr-x 25 user group 4096 Jan 1 12:00 ..\n-rw-r--r-- 1 user group 142 Jan 1 12:00 file.txt\n",
"stderr": "",
"exit_code": 0
}
ポートフォワーディングの設定
注:ポートフォワーディングは port_forward 機能によりデフォルトで有効です。
{
"command": "ssh_forward",
"params": {
"session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
"local_port": 8080,
"remote_address": "internal-server",
"remote_port": 80
}
}
応答:
{
"local_address": "127.0.0.1:8080",
"remote_address": "internal-server:80",
"active": true
}
セッションの切断
{
"command": "ssh_disconnect",
"params": {
"session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b"
}
}
応答:
"Session c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b disconnected successfully"
すべてのアクティブなセッションの一覧表示
{
"command": "ssh_list_sessions"
}
応答:
[
"c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
"d9b4c3a2-5e6f-7g8h-9i0j-1k2l3m4n5o6p"
]
設定
サーバーは、以下の環境変数を使って設定できます。
| 変数 | 説明 | デフォルト |
|---|---|---|
| MCP_PORT | MCPサーバーのポート | 8000 |
| RUST_LOG | ログレベル | info |
機能の設定
このプロジェクトではCargoの機能を使って、一部の機能を有効または無効にします。
| 機能 | 説明 | デフォルト |
|---|---|---|
| port_forward | SSHポートフォワーディングのサポートを有効にします | 有効 |
ポートフォワーディングを無効にしてビルドするには:
cargo build --release --no-default-features
コントリビューション
コントリビューションを歓迎します!お気軽にプルリクエストを送信してください。
CI/CDパイプライン
このプロジェクトでは、継続的インテグレーションとデプロイにGitHub Actionsを使用しています。
- すべてのPRとmainへのコミットは自動的にテストされます
- タグ付きリリース(
vで始まるもの)は、自動的にcrates.ioに公開されます - Dockerイメージは自動的にビルドされ、Docker Hubにプッシュされます
- mainブランチにはlatestタグが付与されます
- セマンティックバージョニングによるリリース(v1.0.0、v1.0など)にはバージョンタグが付与されます
- 新しいリリースを作成する際は、Cargo.tomlのバージョンがタグと一致していることを確認してください(例:v0.1.0)
- GitHubリポジトリの設定で、
CARGO_REGISTRY_TOKEN、DOCKERHUB_USERNAME、DOCKERHUB_TOKENのシークレットを設定する必要があります
ライセンス
このプロジェクトはMITライセンスの下で公開されています。詳細はLICENSEファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。