SSH MCP Server
一个基于 Model Context Protocol (MCP) 的 SSH 服务器,提供通过 SSH 连接到远程服务器并执行命令的功能。
功能特性
🔐 支持密码和SSH密钥认证
🌐 支持多个命名SSH连接
🚀 执行远程shell命令
📊 获取命令执行结果(成功/失败状态、退出码)
📝 获取命令输出内容(stdout、stderr)
🔄 支持交互式命令执行
📤 支持文件上传(SFTP)
⚡ 基于环境变量的灵活配置
🛡️ 完善的错误处理和日志记录
♻️ 向后兼容传统单连接配置
快速开始
方式一:使用 uvx(推荐,无需克隆)
直接在 MCP 客户端配置中使用 uvx,无需手动安装:
Claude Desktop
编辑配置文件(Windows: %APPDATA%\Claude\claude_desktop_config.json,macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):
VS Code / Cursor
在项目根目录创建 .mcp.json 文件:
方式二:从源码安装
配置 MCP 客户端使用本地安装:
提示:将 SSH 连接信息替换为您的实际配置。支持通过环境变量配置多个连接,详见下方配置说明。
配置
多连接配置(推荐)
通过环境变量配置多个命名SSH连接,格式为 SSH_{连接名}_{参数名}:
连接命名规则:
连接名使用大写字母和下划线,如
PROD、TEST、DEV_SERVER在工具调用时使用小写形式,如
connection_name="prod"
支持的参数:
HOST: 目标服务器的IP地址或主机名(必需)USERNAME: SSH登录用户名(必需)PASSWORD: SSH登录密码(与 KEY_PATH 二选一)KEY_PATH: SSH私钥文件路径(与 PASSWORD 二选一)PORT: SSH端口号,默认为22(可选)
单连接配置(向后兼容)
传统的单连接配置方式仍然支持,会被自动注册为 default 连接:
日志配置(可选)
可用工具
1. list_ssh_connections
列出所有可用的SSH连接配置。
返回:
2. execute_command
执行shell命令并返回完整结果。
参数:
command(str): 要执行的shell命令timeout(int, 可选): 超时时间,默认30秒connection_name(str, 可选): 连接名称,不指定则使用默认连接
返回:
4. check_ssh_connection
检查SSH连接状态。
参数:
connection_name(str, 可选): 连接名称,不指定则使用默认连接
返回:
5. execute_interactive_command
执行交互式命令(可以发送输入数据)。
参数:
command(str): 要执行的shell命令input_data(str, 可选): 要发送给命令的输入数据timeout(int, 可选): 超时时间,默认30秒connection_name(str, 可选): 连接名称,不指定则使用默认连接
返回:同 execute_command
6. upload_file
使用SFTP协议上传文件到远程服务器。
参数:
local_path(str): 本地文件路径remote_path(str): 远程服务器文件路径timeout(int, 可选): 传输超时时间,默认60秒connection_name(str, 可选): 连接名称,不指定则使用默认连接
返回:
7. download_file
使用SFTP协议从远程服务器下载文件到本地。
参数:
remote_path(str): 远程服务器文件路径(绝对路径)local_path(str): 本地文件保存路径timeout(int, 可选): 传输超时时间,默认60秒connection_name(str, 可选): 连接名称,不指定则使用默认连接
返回:
8. list_directory
获取远程目录的结构化文件列表。
参数:
remote_path(str, 可选): 远程目录路径,默认为当前目录 "."timeout(int, 可选): 操作超时时间,默认30秒connection_name(str, 可选): 连接名称,不指定则使用默认连接
返回:
使用示例
列出所有连接
文件下载
目录列表
使用默认连接
使用指定连接
检查连接状态
交互式命令
文件上传
安全注意事项
密钥认证优于密码认证:推荐使用SSH密钥而不是密码
环境变量安全:不要在代码中硬编码敏感信息,使用
.env文件并加入.gitignore网络安全:确保SSH连接在安全的网络环境中
权限控制:使用具有适当权限的用户账户
连接隔离:为不同环境(生产、测试、开发)配置独立的连接
错误处理
服务器会处理以下常见错误:
SSH认证失败
网络连接问题
命令执行超时
权限不足
连接不存在
所有错误都会记录到日志中,并返回详细的错误信息。
项目结构
更新日志
v2.0.0 - 多连接支持
✨ 新增多个命名SSH连接支持
✨ 新增
list_ssh_connections工具✨ 所有工具函数支持
connection_name参数✨ 自动发现和加载环境变量中的连接配置
♻️ 保持向后兼容传统单连接配置
许可证
MIT License