mcp-ssh远程
MCP(模型上下文协议)服务器,用于封装 系统 ssh 二进制 在远程主机上执行命令——完全支持 ProxyCommand、堡垒主机、跳转主机和中的任何配置 ~/.ssh/config.
专为GPU/HPC服务器位于堡垒主机后面、无法访问互联网、您希望在远程运行作业的同时使用Claude Code进行本地开发的工作流而构建。
为什么存在
大多数基于SSH的MCP服务器(例如。 @fangjunjie/ssh-mcp-server)使用节点 ssh2 图书馆内部 不支持 ProxyCommand。如果您的远程服务器位于堡垒主机后面或需要在中定义的自定义代理设置 ~/.ssh/config,这些服务器根本无法连接。
此服务器没有自己的SSH实现,它调用系统 ssh 直接二进制,因此它继承了shell SSH已经支持的所有内容: ProxyCommand, ProxyJump、身份文件, ControlMaster、端口转发等。
特性
- 适用于任何
~/.ssh/config设置 --ProxyCommand、ProxyJump、魔法用户自动转发堡垒 - 可选SSH ControlMaster多路复用 --选择加入
MCP_SSH_MULTIPLEX=1对于它工作的主机(默认情况下为关闭状态;请参阅 SSH多路复用) - 登录外壳包装 --命令通过运行
bash -l因此,您的完整环境(conda、Slurm、模块)始终可用 - Slurm集成 --提交、取消、监视作业和直接读取日志
- rsync支持 --通过堡垒将本地目录同步到远程服务器
- 安全的文件操作 --通过stdin管道进行大文件写入(没有shell参数限制),使用查找和替换编辑文件
SSH多路复用
多路复用是 默认情况下关闭许多跳跃主机,尤其是魔法用户自动前进堡垒(例如。 user/target_ip/target_user)--每个TCP连接只允许一个会话。随后,每次后续通话均以失败告终 Session open refused by peer,将stderr泄漏到响应中,并在负载下剥落。
关闭多路复用后,每次调用都会打开一个新的SSH连接。每次通话稍慢,但正确可靠。
对于支持多路复用的主机(纯直接SSH、支持会话转发的跳转主机上的标准ProxyJump),请通过env var选择加入:
{
"mcpServers": {
"ssh-remote": {
"type": "stdio",
"command": "node",
"args": ["/path/to/mcp-ssh-remote/index.js", "--host", "myserver"],
"env": {"MCP_SSH_MULTIPLEX": "1"}
}
}
}需求
- Node.js>=14
- 系统
ssh和rsync已安装(openssh) - 目标主机必须可通过以下方式访问
ssh从您的终端
安装
通过npx(无需安装):
npx mcp-ssh-remote --host myserver或者克隆并直接运行:
git clone https://github.com/JasonLinjc/mcp-ssh-remote.git
node mcp-ssh-remote/index.js --host myserverClaude代码配置
添加到您的 ~/.claude.json 在...之下 mcpServers:
{
"mcpServers": {
"ssh-remote": {
"type": "stdio",
"command": "node",
"args": ["/path/to/mcp-ssh-remote/index.js", "--host", "myserver"],
"env": {}
}
}
}或者使用npx:
{
"mcpServers": {
"ssh-remote": {
"type": "stdio",
"command": "npx",
"args": ["mcp-ssh-remote", "--host", "myserver"],
"env": {}
}
}
}您还可以通过Claude Code CLI添加它:
claude mcp add ssh-remote -- node /path/to/mcp-ssh-remote/index.js --host myserverBastion/ProxyCommand示例
如果 ~/.ssh/config 包含:
Host myserver
HostName 10.0.0.5
User alice
ProxyCommand ssh bastion nc %h %p那就过去吧 --host myserver --ProxyCommand会自动执行。
工具
文件操作
| 工具 | 说明 |
|---|---|
execute_command | 运行任何shell命令(可配置超时,最长10分钟) |
read_file | 读取远程文件(支持 offset 和 limit 对于大文件) |
write_file | 将内容写入远程文件(创建父目录,处理大文件) |
edit_file | 查找并替换远程文件中的唯一字符串 |
list_directory | 列出远程目录中的文件(ls -la) |
grep_files | 使用正则表达式搜索文件内容(递归,带文件过滤) |
glob_files | 按glob模式查找文件 |
Slurm作业管理
| 工具 | 说明 |
|---|---|
slurm_status | 显示作业队列(当前用户或所有用户) |
slurm_submit | 提交批处理作业(从脚本路径或内联脚本内容) |
slurm_cancel | 按ID取消作业 |
slurm_job_info | 获取详细的工作信息(scontrol show job) |
slurm_log | 正在运行或已完成作业的尾部stdout/stderr日志 |
slurm_array_summary | 阵列作业的简明摘要:已完成/正在运行/挂起/失败计数、失败任务ID |
slurm_resubmit_failed | 识别阵列作业中失败的任务,并仅重新提交这些任务 |
同步和实用程序
| 工具 | 说明 |
|---|---|
rsync_to_remote | 将本地目录同步到远程主机(使用排除模式、模拟运行、删除) |
rsync_from_remote | 将远程目录同步到本地(将结果拉回来) |
git_pull_remote | 在远程目录中提取最新的git更改 |
tail_file | 读取远程文件的最后N行(用于监视日志) |
disk_usage | 检查文件或目录的磁盘使用情况(可选深度) |
典型工作流程
1. Edit code locally → Claude Code's native Edit/Write tools
2. Sync to remote → rsync_to_remote (quick) or git push + git_pull_remote (committed)
3. Submit a Slurm job → slurm_submit
4. Monitor training → slurm_status + slurm_log
5. Read results → read_file, grep_files对话示例:
You: "Change the learning rate to 1e-4 in train.py"
Claude: [edits local file]
You: "Sync and submit on gpu31 with 4 GPUs"
Claude: [rsync_to_remote] → [slurm_submit -p gpu31 --gres=gpu:4]
You: "How's it going?"
Claude: [slurm_status] → [slurm_log]用法
node index.js --host ` 必须匹配您可以联系到的主机 ssh --IP、主机名或 Host 别名来自 ~/.ssh/config`.
许可证
麻省理工学院
