🚀 SSH/SFTP MCP 服務器
SSH/SFTP MCP 服務器是一個基於模型上下文協議(MCP)的服務器,它允許像 Claude 這樣的 AI 助手在遠程服務器上執行 SSH 命令並進行 SFTP 文件操作。
🚀 快速開始
配置 Claude 桌面版
將以下配置添加到你的 Claude 桌面版配置文件中:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Linux:
~/.config/Claude/claude_desktop_config.json
選項 1:命令行參數(推薦)
通過命令行參數直接配置服務器:
{
"mcpServers": {
"ssh": {
"command": "npx",
"args": [
"ssh-client-mcp",
"--host", "192.168.1.100",
"--user", "admin",
"--password", "your-password"
]
}
}
}
使用私鑰認證:
{
"mcpServers": {
"ssh": {
"command": "npx",
"args": [
"ssh-client-mcp",
"--host", "192.168.1.100",
"--user", "admin",
"--key", "~/.ssh/id_rsa"
]
}
}
}
使用私鑰 + 密碼短語:
{
"mcpServers": {
"ssh": {
"command": "npx",
"args": [
"ssh-client-mcp",
"--host", "192.168.1.100",
"--user", "admin",
"--key", "~/.ssh/id_rsa",
"--passphrase", "your-key-passphrase"
]
}
}
}
可用的命令行參數:
| 參數 |
短參數 |
描述 |
--host |
-h |
服務器主機名或 IP |
--port |
-p |
SSH 端口(默認:22) |
--user |
-u |
SSH 用戶名 |
--password |
|
SSH 密碼 |
--key |
-k |
私鑰文件路徑 |
--passphrase |
|
私鑰密碼短語 |
--id |
|
服務器 ID(默認:"cli") |
--name |
|
服務器顯示名稱 |
選項 2:配置文件
在工作目錄中創建一個 servers.json 文件:
{
"servers": [
{
"id": "my-server",
"name": "My Server",
"host": "192.168.1.100",
"port": 22,
"username": "admin",
"password": "your-password"
}
],
"defaultServer": "my-server"
}
選項 3:環境變量
SSH_SERVER_DEV_HOST=192.168.1.100
SSH_SERVER_DEV_PORT=22
SSH_SERVER_DEV_USERNAME=admin
SSH_SERVER_DEV_PASSWORD=your-password
SSH_SERVER_DEV_NAME=Development Server
然後重啟 Claude 桌面版以加載 MCP 服務器。
✨ 主要特性
- 服務器配置管理:可以在配置文件或環境變量中定義服務器。
- 連接測試:在建立會話之前測試服務器連接性。
- SSH 命令執行:遠程運行命令,支持可選的 sudo 權限。
- SFTP 文件操作:可以上傳、下載、列出、創建和刪除文件/目錄。
- 會話管理:自動清理空閒會話,支持連接池。
- 多種認證方法:支持密碼和私鑰認證。
📦 安裝指南
使用 npx(推薦)
npx ssh-client-mcp
使用 npm
npm install -g ssh-client-mcp
從源代碼安裝
git clone https://github.com/veithly/ssh-client-mcp.git
cd ssh-client-mcp
npm install
npm run build
💻 使用示例
列出已配置的服務器
Tool: ssh_list_servers
Arguments: {}
測試連接
Tool: ssh_test_connection
Arguments: {
"serverId": "my-server"
}
連接到服務器
Tool: ssh_connect_by_id
Arguments: {
"serverId": "my-server"
}
執行命令
Tool: ssh_exec
Arguments: {
"sessionId": "<session-id>",
"command": "ls -la /home"
}
上傳文件
Tool: sftp_upload
Arguments: {
"sessionId": "<session-id>",
"localPath": "/local/path/file.txt",
"remotePath": "/remote/path/file.txt"
}
下載文件
Tool: sftp_download
Arguments: {
"sessionId": "<session-id>",
"remotePath": "/remote/path/file.txt",
"localPath": "/local/path/file.txt"
}
📚 詳細文檔
可用工具(共 18 個)
服務器管理
| 工具 |
描述 |
ssh_list_servers |
列出所有已配置的服務器 |
ssh_get_server |
獲取特定服務器的詳細信息 |
ssh_test_connection |
測試與服務器的連接 |
ssh_test_all_connections |
測試所有已配置的服務器 |
ssh_connect_by_id |
使用配置中的服務器 ID 進行連接 |
連接管理
| 工具 |
描述 |
ssh_connect |
使用憑據建立 SSH 連接 |
ssh_disconnect |
關閉 SSH 會話 |
ssh_list_sessions |
列出所有活動的 SSH 會話 |
命令執行
| 工具 |
描述 |
ssh_exec |
在遠程服務器上執行命令 |
ssh_sudo_exec |
使用 sudo 權限執行命令 |
文件操作(SFTP)
| 工具 |
描述 |
sftp_upload |
將本地文件上傳到遠程服務器 |
sftp_download |
從遠程服務器下載文件 |
sftp_ls |
列出遠程目錄的內容 |
sftp_mkdir |
在遠程服務器上創建目錄 |
sftp_rm |
刪除文件或目錄 |
sftp_stat |
獲取文件/目錄信息 |
sftp_read |
讀取遠程文件的內容 |
sftp_write |
將內容寫入遠程文件 |
配置選項
環境變量
| 變量 |
描述 |
默認值 |
SESSION_TIMEOUT |
會話超時時間(毫秒) |
1800000(30 分鐘) |
MAX_SESSIONS |
最大併發會話數 |
100 |
SSH_CONNECTION_TIMEOUT |
連接超時時間(毫秒) |
30000 |
SSH_DEFAULT_SERVER |
默認服務器 ID |
- |
服務器配置字段
| 字段 |
類型 |
是否必需 |
描述 |
id |
字符串 |
是 |
唯一的服務器標識符 |
name |
字符串 |
是 |
顯示名稱 |
host |
字符串 |
是 |
主機名或 IP 地址 |
port |
數字 |
否 |
SSH 端口(默認:22) |
username |
字符串 |
是 |
SSH 用戶名 |
password |
字符串 |
否* |
SSH 密碼 |
privateKeyPath |
字符串 |
否* |
私鑰文件路徑 |
passphrase |
字符串 |
否 |
私鑰密碼短語 |
description |
字符串 |
否 |
服務器描述 |
tags |
字符串數組 |
否 |
用於過濾的標籤 |
*必須提供 password 或 privateKeyPath 中的一個。
安全注意事項
- 會話在 30 分鐘無活動後自動過期。
- 最大會話限制可防止資源耗盡。
- 憑據不會持久存儲。
- sudo 密碼不會被記錄。
- 儘可能使用 SSH 密鑰代替密碼。
開發
git clone https://github.com/veithly/ssh-client-mcp.git
cd ssh-client-mcp
npm install
npm run build
npm run dev
npm run clean
項目結構
ssh-client-mcp/
├── src/
│ ├── index.ts # MCP 服務器入口點
│ ├── types.ts # 類型定義
│ ├── SessionManager.ts # SSH 會話生命週期管理
│ ├── SSHExecutor.ts # 命令執行
│ ├── SFTPOperations.ts # SFTP 文件操作
│ ├── ConnectionTester.ts # 連接測試
│ ├── config/
│ │ ├── ConfigManager.ts # 配置管理
│ │ ├── types.ts # 配置類型
│ │ └── index.ts # 配置導出
│ └── tools/
│ ├── connection.ts # 連接工具
│ ├── command.ts # 命令工具
│ ├── file.ts # 文件工具
│ ├── server.ts # 服務器管理工具
│ └── index.ts # 工具導出
├── servers.example.json # 示例服務器配置
├── .env.example # 示例環境配置
├── package.json
├── tsconfig.json
└── README.md
貢獻
歡迎貢獻代碼!請隨時提交拉取請求。
- 分叉倉庫。
- 創建你的功能分支 (
git checkout -b feature/AmazingFeature)。
- 提交你的更改 (
git commit -m 'Add some AmazingFeature')。
- 推送到分支 (
git push origin feature/AmazingFeature)。
- 打開拉取請求。
📄 許可證
本項目採用 MIT 許可證,版權所有 © 2024。
致謝
專為 Claude AI 設計