通用SSH MCP
一个灵活的MCP服务器,用于通过SSH在远程服务器上执行命令,并带有可选的命令包装器。
特性
- 持久SSH连接:使用ssh2库快速执行命令
- 可配置包装器:沙盒、超时或其他控制的可选命令包装器
- 可配置工具名称:每个实例的自定义工具名称,便于在Claude UI中识别
- 多个系统:为不同的目标系统构建单独的包
- 简单的工具界面:带字符串参数的单个工具
快速开始
1.为您的目标系统构建
./build.sh ssh-ubuntupc这创造了 ssh-ubuntupc.mcpb 您可以在Claude Desktop中安装。该工具将在Claude UI中显示为“ssh-ubuntupc”。
2.在Claude Desktop中安装
- 转移
.mcpb文件到Windows - 双击安装
- 配置:
- SSH主机: 192.168.1.70 (使用IP地址,而不是主机名) - SSH用户名: YourUsername - SSH私钥路径: C:\Users\YourUsername\.ssh\id_ed25519 - 命令超时: 30 (秒) - 命令包装器:留空以直接执行,或 srt 用于沙盒 - 工具名称: ssh-ubuntupc (自动填充,有助于区分多个SSH服务器)
3.在Claude中使用
Using ssh-ubuntupc, run: ls -la /home/YourUsername工具名称配置
当运行多个SSH MCP服务器(例如,每个远程系统一个)时,工具名称有助于在Claude UI中区分它们。
构建脚本会自动设置工具名称以匹配包名称:
./build.sh ssh-kali # Tool appears as "ssh-kali" in Claude UI
./build.sh ssh-ubuntupc # Tool appears as "ssh-ubuntupc" in Claude UI没有这个,所有实例都将显示为“命令”,使其无法区分。
命令包装器
包装器字段允许您控制命令的执行方式:
无包装(空字符串):
- 命令直接通过bash执行
- 快速、无限制
- 用于受信任的环境
随着 srt 包装:
- 带有内核级限制的沙盒命令
- 需要在远程系统上安装SRT
- 文件系统和网络策略执行
- 有关SRT设置,请参阅INSTALLATION.md
随着 timeout N 包装:
- 命令限制为N秒
- 超时自动终止
- 适用于可能长时间运行的命令
随着 nice -n N 包装:
- 命令以较低优先级运行
- 对系统负载的影响较小
定制包装:
- 任何接受命令字符串的命令
- 例子:
strace -e trace=file用于调试
\[!警告\] 命令包装器配置:对于直接bash执行,请将包装器字段留空或使用单个空格" ".切勿使用"bash"作为包装器,这会创建一个双bash调用(包装器bash+SSH守护进程bash),导致命令失败。
多个系统
为每个要连接的系统构建一个包:
./build.sh ssh-ubuntupc # Creates ssh-ubuntupc.mcpb
./build.sh ssh-kali # Creates ssh-kali.mcpb
./build.sh ssh-pihole # Creates ssh-pihole.mcpb
./build.sh ssh-prodserver # Creates ssh-prodserver.mcpb每个软件包都是独立的,在Claude Desktop中有自己的配置。每个都将在Claude UI中显示自己的名称,以便于识别。
建筑
graph TD
subgraph "Windows Machine"
Claude[Claude Desktop App]
MCP[MCP Server
Node.js Process]
SSH2[SSH2 Library
Persistent Connection]
Claude -->|MCP Protocol
stdio| MCP
MCP -->|uses| SSH2
end
subgraph "Ubuntu Server ubuntupc"
SSH_Daemon[SSH Daemon
sshd]
Wrapper[Optional Wrapper
srt/timeout/direct]
Shell[Bash Shell]
SSH_Daemon -->|spawns| Shell
Shell -->|may wrap via| Wrapper
Wrapper -->|executes| Commands[Commands & Programs]
end
SSH2 -->|SSH Connection
Port 22
PERSISTENT| SSH_Daemon
SSH_Daemon -->|stdout/stderr| SSH2
SSH2 -->|results| MCP
MCP -->|JSON-RPC| Claude
style Claude fill:#e1f5ff
style MCP fill:#fff4e1
style SSH2 fill:#ffe1e1
style SSH_Daemon fill:#e1ffe1
style Wrapper fill:#fff9e1
style Shell fill:#f0f0f0Claude Desktop (Windows)
→ MCP Server (Node.js on Windows)
→ SSH2 library
→ SSH connection to remote server
→ [Optional wrapper command]
→ Actual command executionSRT包装器示例:
User asks: "list files"
→ Tool call: command(command="ls -la")
→ Server wraps: srt 'ls -la'
→ SSH executes on remote: srt 'ls -la'
→ SRT applies policy, spawns bubblewrap
→ Sandboxed bash executes: ls -la工具定义
姓名: 可通过以下方式配置 tool_name 参数(默认为包名)
参数:
command(string,必填):要执行的命令
行为:
- 检查交互式命令(拒绝vim、top、不带args的sudo等)
- 如果已配置,则应用包装器
- 通过持久SSH连接执行
- 返回stdout、stderr和退出代码
文件
manifest.json-MCP包定义server/index.js-MCP服务器实现package.json-Node.js依赖关系build.sh-生成用于创建命名包的脚本INSTALLATION.md-详细的设置指南(以SRT为重点)COMPARISON.md-标准与SRT比较QUICKSTART.md-5分钟设置
SRT安全
使用时 srt 包装:
- 在远程系统上安装必备组件:
sudo apt install bubblewrap
sudo chmod u+s /usr/bin/bwrap
npm install -g @anthropic-ai/sandbox-runtime- 创建策略文件(
~/.srt-settings.json):
{
"filesystem": {
"denyRead": ["~/.ssh/id_rsa", "~/.ssh/id_ed25519", "~/.srt-settings.json"],
"allowWrite": ["~/projects", "/tmp"],
"denyWrite": ["/etc", "/usr", "~/.ssh", "~/.srt-settings.json"]
},
"network": {
"allowedDomains": ["github.com", "pypi.org"],
"deniedDomains": []
}
}- 测试SRT:
srt 'ls -la' # Should work
srt 'cat ~/.ssh/id_ed25519' # Should be blocked⚠️ 严重SRT安全警告
默认SRT配置存在安全漏洞:默认情况下,SRT不会阻止对其自己的配置文件的访问。如果没有正确的配置,Claude可以修改 ~/.srt-settings.json 逃离沙箱。
所需保护:
{
"filesystem": {
"denyRead": ["~/.srt-settings.json"],
"denyWrite": ["~/.srt-settings.json"]
}
}验证测试:
# This should be BLOCKED
srt 'cat ~/.srt-settings.json'
srt 'echo "malicious" >> ~/.srt-settings.json'如果这些命令成功,你的沙盒就会受到威胁。SRT必须拒绝对其自己的配置文件进行读写访问,以防止逃逸。
参考:参见 拟人沙盒运行时 有关SRT配置和安全考虑的更多详细信息。
有关完整的设置说明,请参阅INSTALLATION.md。
版本历史记录
- 3.1.0 -可配置工具名称
- 添加 --tool-name Claude UI中自定义工具名称的参数 - 生成脚本自动设置工具名称以匹配包名称 - 帮助区分多个SSH服务器实例
- 3.0.0 -具有可配置包装器的通用SSH
- 工具重命名自 bash 到 command - 添加了可配置的包装器字段 - 用于创建多个命名包的构建脚本
- 2.1.0 -SRT特定版本(已弃用)
- 硬编码SRT包装
- 2.0.0 -持久SSH2连接
- 带有SSH2的原始ubuntu shell mcp
许可证
MIT许可证
作者
Carlos-BlockSecCA
