SSH Remote File MCP Server
SSH Remote File MCP Server
Читайте, редактируйте и выполняйте команды на удалённом сервере через Claude Code — как будто файлы находятся локально.
MCP-сервер, который предоставляет удалённый SSH-хост в виде набора файловых инструментов. После регистрации в Claude Code вы можете попросить его прочитать /home/you/proj/main.py, отредактировать функцию, запустить pytest или выполнить grep по удалённому дереву — при этом он общается с сервером по SSH, с ограничением путей и фильтрацией команд в процессе.
中文文档 / Китайская версия → · GitHub →
Лицензия
MIT — см. LICENSE.
Related MCP server: MCP SSH Server
Возможности
Инструмент | Назначение |
| Чтение удалённого файла |
| Создание или перезапись (а также дозапись) удалённого файла |
| Поиск и замена в удалённом файле |
| Список удалённой директории с правами, размером и временем изменения |
| Выполнение shell-команды на удалённом сервере (с фильтрами безопасности) |
| Поиск файлов по маске имени или содержимому |
| Снимок ОС / Python / диска / памяти / ЦП |
| Подробная информация о пути |
Быстрый старт
# 1. Clone and enter
git clone https://github.com/zhangqi-eiq/server_mcp.git
cd server_mcp
# 2. Install (editable mode — picks up code changes immediately)
python install.py
# 3. Edit your real credentials
# (file is at ~/.ssh-mcp-server/config.json by default)
# 4. Restart Claude Code, then in a chat:
# "show me the env of my server"Вот и всё. install.py делает три вещи:
pip install -e .— устанавливает пакет.Копирует
config.json(со значениями-заглушками) в~/.ssh-mcp-server/.Запускает
claude mcp add, чтобы сервер появился в Claude Code.
Если у вас ещё нет CLI claude, выполните python install.py --no-register и добавьте запись MCP вручную (см. Ручная настройка).
Ручная настройка
Если вы предпочитаете настроить всё вручную или install.py не зарегистрировал сервер должным образом:
1. Установите пакет
pip install -e .Это добавляет ssh_mcp_server в путь импорта Python, чтобы python -m ssh_mcp_server мог запустить сервер.
2. Создайте конфигурацию
Скопируйте config.json в ~/.ssh-mcp-server/config.json (загрузчик ищет его здесь, если SSH_MCP_CONFIG не задан) и укажите реальные значения:
mkdir -p ~/.ssh-mcp-server
cp config.json ~/.ssh-mcp-server/config.json
$EDITOR ~/.ssh-mcp-server/config.json3. Зарегистрируйте в Claude Code
Запись MCP должна запускать сервер через тот интерпретатор Python, в который вы выполнили установку. <python> ниже должен быть абсолютным путём к этому интерпретатору (sys.executable из вашего активированного окружения, например C:\Users\you\.conda\envs\myenv\python.exe в Windows или /home/you/.venv/bin/python в Linux).
Вариант A — на уровне пользователя, доступен в любом проекте:
claude mcp add --scope user ssh-remote \
-e SSH_MCP_CONFIG="$HOME/.ssh-mcp-server/config.json" \
-- "<python>" -m ssh_mcp_serverВариант Б — на уровне проекта, только для этого проекта:
Создайте .mcp.json в корне проекта:
{
"mcpServers": {
"ssh-remote": {
"command": "<absolute path to python>",
"args": ["-m", "ssh_mcp_server"],
"env": {
"SSH_MCP_CONFIG": "/absolute/path/to/your/config.json"
}
}
}
}Примечание: Claude Code ищет
mcpServersв двух местах —~/.claude.json(управляется CLI, записывается командойclaude mcp add) и~/.claude/settings.json(редактируется вручную). Указанный выше способ через CLI автоматически записывает в нужный файл.
Справочник по конфигурации
Структура config.json:
{
"ssh": {
"host": "your-server.example.com",
"port": 22,
"username": "your-username",
"auth": {
"type": "password",
"key_path": "",
"password": "your-password",
"key_password": ""
},
"connect_timeout": 10,
"keepalive_interval": 30
},
"allowed_paths": [
"/home/your-username/projects"
],
"security": {
"blocked_commands": ["rm -rf /", "mkfs", ...],
"max_file_size_mb": 50,
"max_output_chars": 100000,
"command_timeout": 30
}
}SSH-подключение
Поле | Описание | По умолчанию |
| Адрес сервера (IP или домен) | обязательно |
| SSH-порт |
|
| Имя пользователя для входа | обязательно |
|
|
|
| Путь к закрытому ключу (аутентификация по ключу) | обязательно, если |
| Пароль для входа (аутентификация по паролю) | обязательно, если |
| Парольная фраза для ключа | пусто |
| Секунды |
|
| Секунды между keepalive-пакетами |
|
Управление доступом
allowed_paths— белый список удалённых каталогов. Каждая файловая операция проверяется по этому списку после нормализации... Запросы за пределами списка отклоняются. Вложенные пути наследуют доступ (например,/data/projразрешает/data/proj/sub/file.py).security.blocked_commands— список шаблонов shell-команд, которыеssh_run_commandотказывается выполнять. По умолчанию покрыты очевидные опасные команды (rm -rf /,mkfs,shutdown, fork-бомбы, прямая запись в блочные устройства). Вы можете расширить список, но никогда не ослабляйте его, чтобы «решить» законную задачу — см. Модель безопасности.
Ограничения ресурсов
Поле | Эффект | По умолчанию |
|
|
|
|
|
|
|
|
|
Аутентификация
По ключу (рекомендуется)
# On your local machine
ssh-keygen -t ed25519 -C "you@example.com"
# Push the public key to the remote
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@serverЗатем в config.json:
"auth": {
"type": "key",
"key_path": "~/.ssh/id_ed25519",
"key_password": ""
}key_password нужен только в том случае, если сам закрытый ключ зашифрован.
По паролю
"auth": {
"type": "password",
"password": "your-password"
}Пароль хранится в открытом виде в config.json. Предпочтительнее аутентификация по ключу.
Графический менеджер (необязательно)
Небольшой графический интерфейс на Tk позволяет вести несколько профилей серверов и переключаться между ними:
# From source
python server_manager.py
# Or build a standalone Windows exe and put it on PATH
pip install -e ".[gui]" # adds pyinstaller
python build.py
python setup_global.py
# now `SSH-Server-Manager` is on PATHПрофили хранятся в profiles.json; при переключении выбранный профиль копируется в config.json, чтобы MCP-сервер подхватил его при следующем запуске.
Модель безопасности
Этот сервер намеренно консервативен. Удалённый хост защищён двумя независимыми уровнями:
Ограничение путей. Каждая файловая операция нормализуется (разрешаются
.., схлопываются слэши), а затем проверяется поallowed_paths. Обойти список невозможно — проверка выполняется на стороне сервера после разрешения пути на удалённой машине.Фильтрация команд.
ssh_run_commandотклоняет любую команду, соответствующуюsecurity.blocked_commands(по подстроке). Список по умолчанию блокирует рекурсивное удаление, прямую запись в устройства, завершение работы системы, fork-бомбы и удалённые установщики через shell (curl … | sh). Расширьте список, если нужно разрешить что-то конкретное, — но не вычищайте его.
Чего этот сервер не делает:
Он не запускается от root на удалённой машине. Подключайтесь по SSH под обычным пользователем.
Он не обходит
sudo. Если у указанного пользователя нет правsudo, то их нет и у сервера.Он не предоставляет интерактивную оболочку. Долго работающие процессы завершаются по
command_timeout.
Устранение неполадок
Симптом | Вероятная причина | Решение |
| Сервер зарегистрирован не в той области, или версия CLI | Используйте |
| Установлено в другой Python, чем тот, который использует | Запустите |
| В конфиге всё ещё значения-заглушки | Отредактируйте |
| Путь, который попыталась использовать LLM, отсутствует в | Добавьте путь в |
| LLM попыталась выполнить команду из чёрного списка | Измените |
| Неверные учётные данные или пользователь | Проверьте в обычной оболочке командой |
Сервер запускается, но Claude Code не показывает инструменты | Устаревший процесс расширения VSCode | Полностью закройте и снова откройте VSCode |
Структура проекта
server/
├── ssh_mcp_server/ # MCP server package (the actual product)
│ ├── server.py # tool definitions
│ ├── ssh_client.py # paramiko wrapper
│ ├── security.py # path + command validation
│ └── config.py # config loader
├── server_manager.py # Tk GUI for managing profiles
├── profiles.json # GUI profile store
├── config.json # runtime config template (placeholder values)
├── setup.py # pip-installable package metadata
├── install.py # one-shot installer (install + register)
├── setup_global.py # optional: deploy GUI exe to PATH
├── build.py # optional: PyInstaller wrapper for the GUI
├── SSH-Server-Manager.spec # PyInstaller spec for fine-grained builds
├── requirements.txt # raw dependency pins
├── LICENSE # MIT
├── README.md # this file (English)
└── README.zh.md # Chinese translationЛицензия
MIT — полный текст см. в файле.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables SSH remote access to servers through Claude, allowing users to execute commands, transfer files via SFTP, and manage multiple remote connections using natural language.128MIT
- AlicenseNot gradedqualityNot gradedmaintenanceConnects Claude to remote servers via SSH to execute commands, manage files, and browse directories. It allows users to add, edit, and switch between multiple server configurations through natural language conversations.
- AlicenseAqualityBmaintenanceEnables Claude to connect to servers via SSH, execute commands, transfer files, and manage connections through natural language.9151MIT
- -licenseNot gradedqualityNot gradedmaintenanceEnables Claude Code to control remote servers via SSH for automated deployment, testing, and operations, including command execution and file transfer.4
Related MCP Connectors
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
Read, edit, publish, and preview your pepita websites from Claude.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/zhangqi-eiq/server_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server