mcp-ssh-tool
mcp-ssh-tool
Сервер SSH-клиента на базе протокола Model Context Protocol (MCP), обеспечивающий автономные SSH-операции для GitHub Copilot и VS Code. Включите автоматизацию SSH на естественном языке без ручных запросов или взаимодействия с графическим интерфейсом.
Официальная запись в реестре MCP: io.github.oaslananka/mcp-ssh-tool
Метаданные реестра: https://registry.modelcontextprotocol.io/v0.1/servers/io.github.oaslananka%2Fmcp-ssh-tool/versions/latest
Быстрый старт
Установка
Глобальная установка (рекомендуется):
npm install -g mcp-ssh-toolРазовый запуск:
npx mcp-ssh-tool
Конфигурация MCP-клиента (VS Code / Claude Desktop / другие)
Добавьте в вашу конфигурацию MCP (mcp.json, .vscode/mcp.json или конфигурацию Claude Desktop MCP):
{
"servers": {
"ssh-mcp": {
"type": "stdio",
"command": "mcp-ssh-tool",
"args": []
}
}
}Примеры использования
После настройки вы можете использовать естественный язык в своем MCP-клиенте:
SSH-соединение: "Connect to server 192.168.1.100 as admin using SSH key"
Операции с файлами: "Read the content of /etc/nginx/nginx.conf on the server"
Выполнение команд: "Run 'systemctl status nginx' on the remote server"
Управление пакетами: "Install htop package on Ubuntu server"
Управление службами: "Restart the nginx service"
Claude Desktop: "connect to my server and check disk usage"
Установка пакета/стека служб: "install nginx on my remote server"
Чтение файла конфигурации: "read the file /etc/nginx/nginx.conf"
Перезапуск службы: "restart the nginx service"
Просмотр логов: "list files in /var/log"
Доступные инструменты
ssh_open_session— Установление SSH-соединения с различными методами аутентификацииssh_close_session— Закрытие SSH-сессииssh_list_sessions— Список всех активных SSH-сессийssh_ping— Проверка активности и отклика сессииssh_list_configured_hosts— Список хостов из ~/.ssh/configssh_resolve_host— Разрешение псевдонима хоста из SSH-конфигурацииproc_exec— Удаленное выполнение команд (с опциональным таймаутом)proc_sudo— Выполнение команд с привилегиями sudofs_read,fs_write,fs_list,fs_stat,fs_mkdirp,fs_rmrf,fs_rename— Операции с файловой системойensure_package— Управление пакетами с состояниямиpresentиabsentensure_service— Управление службами, включаяrestartedensure_lines_in_file— Управление строками в файлах с состояниямиpresentиabsentpatch_apply— Применение патчей к файламos_detect— Определение информации о системеget_metrics— Метрики сервера в формате JSON или Prometheusproc_exec_stream— Потоковое выполнение команд с выводом по частямfile_upload,file_download— Вспомогательные инструменты для передачи файлов по SFTPtunnel_local_forward,tunnel_remote_forward,tunnel_close,tunnel_list— Управление туннелями
Доступные ресурсы
mcp-ssh-tool://sessions/active— Активные сессии в формате JSONmcp-ssh-tool://metrics/json— Снимок метрик в формате JSONmcp-ssh-tool://metrics/prometheus— Экспорт метрик в формате Prometheusmcp-ssh-tool://ssh-config/hosts— Разобранные локальные псевдонимы SSH-хостов
Обзор
SSH MCP-сервер выступает в качестве моста между GitHub Copilot и удаленными системами через SSH. Он поддерживает:
Неинтерактивные SSH-операции — Никаких запросов или взаимодействия с GUI
Множественные методы аутентификации — Пароль, SSH-ключи или SSH-агент
Управление сессиями — Автоматическое объединение соединений в пул с TTL и вытеснением по алгоритму LRU
Операции с файловой системой — Чтение, запись, список и управление удаленными файлами через SFTP, с резервным использованием SSH-оболочки для хостов, не предоставляющих подсистему SFTP
Выполнение процессов — Удаленный запуск команд и операций sudo
Автоматизация высокого уровня — Управление пакетами, службами и конфигурациями
Безопасность — Автоматическое скрытие конфиденциальных данных в логах
Архитектура
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ GitHub Copilot │────│ SSH MCP Server │────│ Remote Systems │
│ / VS Code │ │ │ │ (via SSH) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│ │ │
│ MCP stdio protocol │ Session management │ SSH + optional SFTP
│ │ LRU cache + TTL │
│ │ Auth strategies │Встраиваемые / BusyBox цели
Некоторые встраиваемые системы предоставляют выполнение SSH-команд, но не имеют подсистемы SFTP, что часто встречается в системах на базе Dropbear или BusyBox. В этом случае ssh_open_session все равно выполняется успешно и сообщает sftpAvailable: false. Основные файловые инструменты, такие как fs_read, fs_write, fs_stat, fs_list, fs_mkdirp, fs_rmrf и fs_rename, автоматически переключаются на реализацию через оболочку (shell).
Установка
Предварительные требования
Node.js ≥ 20 (LTS)
SSH-доступ к целевым системам
SSH-ключи или учетные данные для аутентификации
Установка из npm
npm install -g mcp-ssh-toolСборка из исходного кода
git clone https://github.com/oaslananka/mcp-ssh-tool.git
cd mcp-ssh-tool
npm install
npm run build
npm linkФлаги CLI
--help/-h: Показать использование и примеры.--version/-v: Вывести версию.--stdio: Принудительный режим stdio (по умолчанию).
Примечание: Это MCP-сервер, работающий через stdio. Терминал не является интерактивной оболочкой; используйте MCP-клиент (Claude Desktop, VS Code MCP и т.д.) или отправляйте JSON-RPC через stdio.
Примечания по платформам
Linux / macOS: Использует POSIX-оболочки с безопасным экранированием. Временная директория по умолчанию:
/tmp.Цели Windows: Требуется сервер/агент OpenSSH; поиск ключей проверяет
C:\Users\<you>\.ssh\. Команды упаковываются для безопасного выполнения в PowerShell. Вспомогательные инструменты для пакетов/служб намеренно отключены для целей Windows.Хост-ключи: Проверка хост-ключей по умолчанию ослаблена. Установите
STRICT_HOST_KEY_CHECKING=trueи, опционально,KNOWN_HOSTS_PATHдля принудительной проверки.
Интеграция с ChatGPT Desktop
Быстрая настройка
npm run setup:chatgptЭта команда автоматически настраивает ChatGPT Desktop для использования mcp-ssh-tool.
Ручная настройка
Добавьте в конфигурацию ChatGPT Desktop MCP:
macOS:
~/Library/Application Support/ChatGPT/mcp.jsonWindows:
%APPDATA%\ChatGPT\mcp.jsonLinux:
~/.config/chatgpt/mcp.json
{
"mcpServers": {
"ssh-mcp-server": {
"name": "ssh-mcp-server",
"command": "npx",
"args": ["-y", "mcp-ssh-tool"]
}
}
}Для получения подробной информации см. docs/chatgpt-usage.md.
Интеграция с Codex
Быстрая настройка
Установите пакет глобально, затем зарегистрируйте его в Codex:
npm install -g mcp-ssh-tool
codex mcp add ssh-mcp -- mcp-ssh-toolЕсли вы предпочитаете не устанавливать глобально, вы можете зарегистрировать его через npx:
codex mcp add ssh-mcp -- npx -y mcp-ssh-toolПроверка
Убедитесь, что Codex видит MCP-сервер:
codex mcp list
codex mcp get ssh-mcpВы должны увидеть включенный stdio-сервер, чья команда — mcp-ssh-tool или npx.
Опциональное усиление безопасности
Чтобы принудительно включить проверку хост-ключей в процессе сервера, управляемом Codex:
codex mcp remove ssh-mcp
codex mcp add ssh-mcp \
--env STRICT_HOST_KEY_CHECKING=true \
--env KNOWN_HOSTS_PATH=/path/to/known_hosts \
-- mcp-ssh-toolПосле добавления сервера перезапустите Codex или откройте новую сессию, затем попробуйте вызвать простой инструмент, например, список активных сессий или открытие SSH-соединения.
Интеграция с VS Code Copilot
Конфигурация на уровне пользователя (рекомендуется)
Откройте VS Code и нажмите Ctrl+Shift+P, затем выполните "MCP: Open User Configuration".
Добавьте в ваш mcp.json:
{
"servers": {
"ssh-mcp": {
"type": "stdio",
"command": "mcp-ssh-tool",
"args": []
}
}
}Конфигурация на уровне рабочей области
Создайте .vscode/mcp.json в вашей рабочей области:
{
"servers": {
"ssh-mcp": {
"type": "stdio",
"command": "mcp-ssh-tool",
"args": []
}
}
}Проверка
Перезапустите VS Code
Откройте Copilot Chat
Инструменты SSH MCP должны появиться в списке доступных инструментов
Протестируйте с помощью: "Connect to 192.168.1.100 as admin and run 'uname -a'"
Claude Desktop, Antigravity и другие MCP-клиенты
Любой MCP-совместимый клиент, который может запустить stdio-сервер, может использовать mcp-ssh-tool.
Точный экран настроек или файл конфигурации зависит от клиента, но процесс везде одинаков:
Установите пакет:
npm install -g mcp-ssh-toolЗарегистрируйте stdio MCP-сервер, который запускает:
{
"servers": {
"ssh-mcp": {
"type": "stdio",
"command": "mcp-ssh-tool",
"args": []
}
}
}Если клиент использует схему типа
mcpServersвместоservers, используйте эквивалентную запись:
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": ["-y", "mcp-ssh-tool"]
}
}
}Для Claude Desktop используйте тот же шаблон команды stdio, что и выше, в его конфигурации MCP. Для Antigravity или других MCP-клиентов используйте собственный интерфейс настроек MCP или формат конфигурации клиента, но укажите в нем ту же исполняемую команду.
Примеры использования
Базовое соединение и выполнение команд
"Connect to 10.11.12.13 as deployer with password 'mypass' and run 'df -h'"Операции с файлами
"Connect to server.example.com as admin, read /etc/nginx/nginx.conf and show me the server blocks"Системное администрирование
"Connect to 192.168.1.50 as root, install htop package, start nginx service, and list /var/www contents"Управление конфигурацией
"Connect to web-server as admin, add these lines to /etc/hosts:
192.168.1.10 db-server
192.168.1.20 cache-server
Then restart networking service"Готовые идеи для промптов
"connect to my server and check disk usage""install nginx on my remote server""read the file /etc/nginx/nginx.conf""restart the nginx service""list files in /var/log"Советы профессионалов
Множественные сессии: Открывайте по одной сессии на хост или окружение и поддерживайте их активность с помощью
ssh_list_sessionsиssh_ping, когда переключаетесь между производственными, тестовыми и рабочими машинами.Резервный SFTP для BusyBox/Dropbear: На встраиваемых системах, которые не предоставляют подсистему SFTP,
ssh_open_sessionвсе равно может завершиться успешно сsftpAvailable: false, и основные инструментыfs_*автоматически переключатся на реализацию через оболочку.Проверка хост-ключей: Установите
STRICT_HOST_KEY_CHECKING=trueв окружении MCP-сервера и, опционально,KNOWN_HOSTS_PATHдля более строгой проверки SSH промышленного уровня.
Справочник API
Архитектура
src/
├── container.ts - Dependency injection wiring
├── config.ts - ConfigManager (env + programmatic overrides)
├── index.ts - CLI entry point & graceful shutdown
├── mcp.ts - MCP server (thin: delegates to ToolRegistry)
├── tools/
│ ├── registry.ts - ToolRegistry (routes CallTool requests)
│ ├── types.ts - ToolProvider interface
│ ├── session.provider.ts
│ ├── process.provider.ts
│ ├── fs.provider.ts
│ ├── ensure.provider.ts
│ ├── system.provider.ts
│ ├── transfer.provider.ts
│ └── tunnel.provider.ts
├── session.ts - SessionManager (LRU cache + TTL)
├── resources.ts - MCP resources for sessions, metrics, and SSH hosts
├── telemetry.ts - Optional OpenTelemetry tracing
├── rate-limiter.ts - Sliding window rate limiter
├── metrics.ts - Prometheus-compatible metrics
├── safety.ts - Command safety warnings (non-blocking)
└── ... - fs-tools, process, ensure, detect, ...Добавление новой группы инструментов
Создайте
src/tools/<your-namespace>.provider.ts, реализующийToolProviderЗарегистрируйте его в
src/tools/index.tsДобавьте модульные тесты в
test/unit/tools/<your-namespace>.provider.test.ts
Изменения в mcp.ts не требуются.
Инструменты сессий
ssh_open_session
{
"host": "example.com",
"username": "admin",
"port": 22,
"auth": "auto",
"password": "optional",
"privateKey": "optional-inline-key",
"privateKeyPath": "optional-path",
"passphrase": "optional",
"useAgent": false,
"readyTimeoutMs": 20000,
"ttlMs": 900000
}Возвращает:
{
"sessionId": "ssh-1645123456789-1",
"host": "example.com",
"username": "admin",
"expiresInMs": 900000
}ssh_close_session
{
"sessionId": "ssh-1645123456789-1"
}ssh_list_sessions, ssh_ping, ssh_list_configured_hosts, ssh_resolve_host
ssh_list_sessionsвозвращает активные сессии с оставшимся TTL.ssh_pingпроверяет активность и задержку сессии.ssh_list_configured_hostsчитает~/.ssh/config.ssh_resolve_hostразворачивает псевдоним SSH-хоста в параметры соединения.
Инструменты команд
proc_exec
{
"sessionId": "ssh-1645123456789-1",
"command": "ls -la /home",
"cwd": "/tmp",
"env": {
"DEBUG": "1"
},
"timeoutMs": 30000
}proc_sudo
{
"sessionId": "ssh-1645123456789-1",
"command": "systemctl restart nginx",
"password": "sudo-password",
"cwd": "/etc",
"timeoutMs": 30000
}Оба возвращают:
{
"code": 0,
"stdout": "command output",
"stderr": "",
"durationMs": 245
}Файловые инструменты
fs_read
{
"sessionId": "ssh-1645123456789-1",
"path": "/etc/hosts",
"encoding": "utf8"
}fs_write
{
"sessionId": "ssh-1645123456789-1",
"path": "/tmp/config.txt",
"data": "server_name example.com;\nlisten 80;",
"mode": 420
}fs_statвозвращаетsize,mtime,modeиtype.fs_listвозвращает{ "entries": [...], "nextToken": "optional" }.fs_mkdirpсоздает директории рекурсивно.fs_rmrfудаляет файлы или директории рекурсивно.fs_renameпереименовывает или перемещает путь.
Инструменты конфигурации и автоматизации
ensure_package
{
"sessionId": "ssh-1645123456789-1",
"name": "nginx",
"state": "present",
"sudoPassword": "optional"
}state поддерживает present и absent.
ensure_service
{
"sessionId": "ssh-1645123456789-1",
"name": "nginx",
"state": "restarted",
"sudoPassword": "optional"
}state поддерживает started, stopped, restarted, enabled и disabled.
ensure_lines_in_file
{
"sessionId": "ssh-1645123456789-1",
"path": "/etc/hosts",
"lines": [
"192.168.1.10 db-server",
"192.168.1.20 cache-server"
],
"state": "present",
"createIfMissing": true,
"sudoPassword": "optional"
}state поддерживает present и absent.
patch_apply
{
"sessionId": "ssh-1645123456789-1",
"path": "/etc/hosts",
"diff": "@@ -1 +1 @@\n-old\n+new"
}os_detect
Возвращает удаленную платформу, дистрибутив, версию, менеджер пакетов, систему инициализации, оболочку и временную директорию.
get_metrics
Возвращает
Latest Blog Posts
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/oaslananka/mcp-ssh-tool'
If you have feedback or need assistance with the MCP directory API, please join our Discord server