Ssh Remote
БесплатноНе проверенEnables executing commands on remote SSH hosts, with full support for bastion/jump hosts and ~/.ssh/config, plus Slurm job management and rsync.
Описание
Enables executing commands on remote SSH hosts, with full support for bastion/jump hosts and ~/.ssh/config, plus Slurm job management and rsync.
README
An MCP (Model Context Protocol) server that wraps the system ssh binary to execute commands on remote hosts — with full support for ProxyCommand, bastion hosts, jump hosts, and any configuration in ~/.ssh/config.
Built for workflows where your GPU/HPC server is behind a bastion host, has no internet access, and you want to develop locally with Claude Code while running jobs remotely.
Why this exists
Most SSH-based MCP servers (e.g. @fangjunjie/ssh-mcp-server) use Node's ssh2 library internally, which does not support ProxyCommand. If your remote server is behind a bastion host or requires a custom proxy setup defined in ~/.ssh/config, those servers simply cannot connect.
This server has no SSH implementation of its own — it calls the system ssh binary directly, so it inherits everything your shell SSH already supports: ProxyCommand, ProxyJump, identity files, ControlMaster, port forwarding, and so on.
Features
- Works with any
~/.ssh/configsetup — ProxyCommand, ProxyJump, magic-user auto-forward bastions - Optional SSH ControlMaster multiplexing — opt in with
MCP_SSH_MULTIPLEX=1for hosts where it works (off by default; see SSH multiplexing) - Login shell wrapping — commands run via
bash -lso your full environment (conda, Slurm, modules) is always available - Slurm integration — submit, cancel, monitor jobs and read logs directly
- rsync support — sync local directories to the remote server through the bastion
- Safe file operations — large file writes piped via stdin (no shell arg limits), edit files with find-and-replace
SSH multiplexing
Multiplexing is off by default. Many jump hosts — especially magic-user auto-forward bastions (e.g. user/target_ip/target_user) — permit only one session per TCP connection. Every follow-up call then fails with Session open refused by peer, leaks stderr into the response, and flakes under load.
With multiplexing off, each call opens a fresh SSH connection. Slightly slower per call, but correct and reliable.
For hosts where multiplexing works (plain direct SSH, standard ProxyJump over a jumphost that supports session forwarding), opt in via env var:
{
"mcpServers": {
"ssh-remote": {
"type": "stdio",
"command": "node",
"args": ["/path/to/mcp-ssh-remote/index.js", "--host", "myserver"],
"env": {"MCP_SSH_MULTIPLEX": "1"}
}
}
}
Requirements
- Node.js >= 14
- System
sshandrsyncinstalled (openssh) - The target host must be reachable via
ssh <hostname>from your terminal
Installation
Via npx (no install needed):
npx mcp-ssh-remote --host myserver
Or clone and run directly:
git clone https://github.com/JasonLinjc/mcp-ssh-remote.git
node mcp-ssh-remote/index.js --host myserver
Claude Code Configuration
Add to your ~/.claude.json under mcpServers:
{
"mcpServers": {
"ssh-remote": {
"type": "stdio",
"command": "node",
"args": ["/path/to/mcp-ssh-remote/index.js", "--host", "myserver"],
"env": {}
}
}
}
Or with npx:
{
"mcpServers": {
"ssh-remote": {
"type": "stdio",
"command": "npx",
"args": ["mcp-ssh-remote", "--host", "myserver"],
"env": {}
}
}
}
You can also add it via the Claude Code CLI:
claude mcp add ssh-remote -- node /path/to/mcp-ssh-remote/index.js --host myserver
Bastion / ProxyCommand example
If ~/.ssh/config contains:
Host myserver
HostName 10.0.0.5
User alice
ProxyCommand ssh bastion nc %h %p
Then just pass --host myserver — the ProxyCommand is followed automatically.
Tools
File Operations
| Tool | Description |
|---|---|
execute_command |
Run any shell command (configurable timeout, up to 10 min) |
read_file |
Read a remote file (supports offset and limit for large files) |
write_file |
Write content to a remote file (creates parent dirs, handles large files) |
edit_file |
Find-and-replace a unique string in a remote file |
list_directory |
List files in a remote directory (ls -la) |
grep_files |
Search file contents with regex (recursive, with file filtering) |
glob_files |
Find files by glob pattern |
Slurm Job Management
| Tool | Description |
|---|---|
slurm_status |
Show job queue (current user or all users) |
slurm_submit |
Submit a batch job (from script path or inline script content) |
slurm_cancel |
Cancel a job by ID |
slurm_job_info |
Get detailed job info (scontrol show job) |
slurm_log |
Tail stdout/stderr logs of a running or completed job |
slurm_array_summary |
Concise summary of an array job: completed/running/pending/failed counts, failed task IDs |
slurm_resubmit_failed |
Identify failed tasks in an array job and resubmit only those |
Sync & Utilities
| Tool | Description |
|---|---|
rsync_to_remote |
Rsync a local directory to the remote host (with exclude patterns, dry-run, delete) |
rsync_from_remote |
Rsync a remote directory to local (pull results back) |
git_pull_remote |
Pull latest git changes in a remote directory |
tail_file |
Read the last N lines of a remote file (useful for monitoring logs) |
disk_usage |
Check disk usage of a file or directory (with optional depth) |
Typical Workflow
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
Example conversation:
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]
Usage
node index.js --host <hostname>
<hostname> must match a host you can reach with ssh <hostname> — an IP, a hostname, or a Host alias from ~/.ssh/config.
License
MIT
Установка Ssh Remote
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/JasonLinjc/mcp-ssh-remoteFAQ
Ssh Remote MCP бесплатный?
Да, Ssh Remote MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Ssh Remote?
Нет, Ssh Remote работает без API-ключей и переменных окружения.
Ssh Remote — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить Ssh Remote в Claude Desktop, Claude Code или Cursor?
Открой Ssh Remote на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Ssh Remote with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
