tufantunc/ssh-mcp

MCP-сервер для управления SSH на Linux-серверах через Model Context Protocol.

MCP⭐ 748TypeScriptпоследний релиз: v2.9.1
Открыть на GitHub ↗

Что это за инструмент

SSH MCP Server — это локальный сервер на базе Model Context Protocol, который позволяет LLM и другим клиентам безопасно выполнять команды оболочки на удалённых Linux и Windows-серверах через SSH.

Зачем нужен

Инструмент решает задачу безопасного удалённого управления серверами через естественный язык, интегрируя SSH-доступ в экосистему MCP. Это полезно для автоматизации рутинных задач администрирования, отладки и мониторинга систем без необходимости ручного ввода команд в терминале.

Что можно реализовать

  • Выполнение диагностических команд на удалённых серверах через интерфейс LLM (например, в Cursor или Claude Desktop)
  • Автоматизация развёртывания и настройки инфраструктуры с использованием sudo-привилегий
  • Мониторинг состояния систем и логов через естественные запросы к LLM
  • Удалённое управление конфигурациями серверов через безопасные SSH-сессии

Ключевые возможности

  • Поддержка аутентификации по паролю и SSH-ключам
  • Встроенная защита от зависаний: автоматическое прерывание процессов по таймауту
  • Гибкая настройка лимитов длины команд и таймаутов выполнения
  • Поддержка повышения привилегий через sudo и su
  • Простая интеграция с популярными клиентами (Claude Code, Cursor, Windsurf) через npx

👤 Кому подойдёт: DevOps-инженеры, системные администраторы и разработчики, использующие LLM для управления серверной инфраструктурой

Релизы

v2.9.1patch
🕐 вчера · релиз на GitHub ↗

Исправлена критическая уязвимость в классификаторе awk, предотвращающая выполнение привилегированных команд без согласования.

  • Fixed: Закрыты уязвимости, позволяющие запускать системные команды или писать файлы через awk без запроса подтверждения.
  • Fixed: Улучшен парсер: теперь awk-программы корректно классифицируются как privileged или destructive, а не остаются safe.
  • Fixed: Исправлена обработка строковых экранирований (например, \ddd) и сохранены пустые аргументы в кавычках.
  • Fixed: Оптимизирован парсер: устранено квадратичное замедление, теперь обработка происходит за один проход без бэктрекинга.
  • Fixed: Обычные команды awk, не содержащие опасных конструкций, остаются безопасными и не требуют согласования.
v2.8.2patch
🕐 7 дн назад · релиз на GitHub ↗

Исправлено зависание SFTP, добавлен флаг destructive для загрузок, обновлён smol-toml и исправлена проверка путей на Windows.

  • Fixed: Исправлено бесконечное зависание команды sftp-download при отсутствии ответа сервера на запрос размера файла.
  • Added: Для операций sftp:upload-file и sftp:download-file установлен минимальный уровень безопасности destructive.
  • Fixed: Обновлена зависимость smol-toml до версии 1.7.1 для устранения уязвимости DoS через некорректные TOML-документы.
  • Fixed: На Windows исправлена ошибка, из-за которой директории с именами, начинающимися на '..', ошибочно считались небезопасными.
v2.8.1patch
🕐 11 дн назад · релиз на GitHub ↗

Исправлена ошибка в подсчёте размера загружаемых файлов через SFTP, теперь указывается корректное количество байт.

  • Fixed: Исправлено некорректное отображение размера загруженных файлов: теперь возвращается реальное количество байт в UTF-8, а не длина строки в UTF-16.
v2.8.0minorbreaking
🕐 17 дн назад · релиз на GitHub ↗

Исправлена логика проверки SSH-ключей: режим strict теперь работает корректно, устранены коллизии между профилями.

  • Fixed: Исправлен режим --hostKeyMode=strict, который ранее блокировал все подключения из-за ошибки в логике проверки ключей.
  • Fixed: Устранена проблема коллизий: теперь pinned-ключ профиля имеет приоритет над записями в общем хранилище, предотвращая ложные ошибки HOST_KEY_MISMATCH.
  • Breaking: Ключ, не совпадающий с pinned-значением, теперь явно вызывает ошибку HOST_KEY_PIN_MISMATCH вместо скрытого сбоя рукопожатия.
  • Fixed: Параметр trustedHostKey теперь корректно удовлетворяет требованиям режима strict, позволяя безопасное подключение при наличии пина.
v2.7.0minorbreaking
🕐 18 дн назад · релиз на GitHub ↗

Исправлены уязвимости в классификаторе команд, добавлен режим отказа при недоступности OPA и защита от перебора токенов.

  • Fixed: Устранены лазейки в регулярных выражениях, позволявшие обходить защиту от бомбы fork.
  • Added: Добавлен флаг --opaFailClosed для принудительного отказа при недоступности OPA-сервиса.
  • Fixed: Исправлена обработка таймаутов и ошибок парсинга URL для OPA, предотвращающая скрытые сбои.
  • Fixed: Внедрена защита от перебора токенов аутентификации (rate limiting) для HTTP-транспорта.
  • Breaking: Интерактивные сессии теперь классифицируются как destructive, что ограничивает их запуск на продакшене.
v2.6.0minorbreaking
🕐 19 дн назад · релиз на GitHub ↗

Критическое исправление безопасности классификатора команд SSH, устраняющее обход защиты через кавычки и интерпретаторы.

  • Fixed: Устранена уязвимость обхода классификатора команд через экранирование кавычками и использование интерпретаторов (CVSS 9.9).
  • Fixed: Команды sftp-upload и interactive open-session теперь классифицируются как destructive для предотвращения записи произвольных файлов.
  • Fixed: Улучшена логика оценки рисков: теперь учитывается максимальный уровень опасности среди всех вложенных команд и носителей.
  • Breaking: Изменены правила доступа: роли operator/viewer на prod/dev теперь получают отказ (deny) вместо разрешения для указанных операций.
  • Added: Введен новый токенизатор, корректно разделяющий команды по разделителям вне кавычек для точной проверки правил безопасности.
v2.5.1patch
🕐 20 дн назад · релиз на GitHub ↗

Обновление OpenTelemetry до v0.221 и исправление уязвимости прототипа в roleBindings.

  • Fixed: Устранена уязвимость прототипа в roleBindings, предотвращающая подмену свойств через __proto__ и toString.
  • Added: Обновлены зависимости OpenTelemetry до версий 0.221.0 и 2.10.0.
  • Fixed: Добавлены unit-тесты для проверки корректности инициализации трассировки и безопасности экспортов.
v2.5.0minorbreaking
🕐 26 дн назад · релиз на GitHub ↗

Обновление Zod до 4.x с переработкой валидации конфигураций, исправлением безопасности и изменением сообщений об ошибках.

  • Breaking: Обновление Zod до версии 4.x, что привело к изменению структуры схем в tools/list и переписыванию всех сообщений валидации конфигураций.
  • Fixed: Исправлена уязвимость: защита от прототипного загрязнения теперь проверяет сырые данные до обработки Zod, предотвращая молчаливое удаление скрытых ролей.
  • Fixed: Исправлена ошибка валидации: добавлено ограничение maximum для signal-process.pid, чтобы избежать проблем с безопасными целыми числами.
  • Added: Удалена зависимость overrides, позволяющая использовать единую версию Zod 4 и избежать конфликтов с вложенными зависимостями SDK.
  • Fixed: Улучшена диагностика ошибок: теперь сообщения указывают конкретную роль с неверным уровнем, а не только сам уровень.
v2.4.2patchbreaking
🕐 27 дн назад · релиз на GitHub ↗

Исправлена уязвимость обхода проверки команд через переменные окружения; добавлена классификация 'destructive' для таких случаев.

  • Fixed: Устранена уязвимость, позволявшая выполнять привилегированные команды без запроса подтверждения через переменные окружения.
  • Added: Введена новая категория 'destructive' для команд, имена которых заданы переменными или подстановками.
  • Breaking: Выполнение команд с динамическими именами теперь требует одобрения, что может блокировать сценарии для роли operator.
v2.4.0minor
🕐 27 дн назад · релиз на GitHub ↗

Сервер запускается без конфигурации, возвращая список инструментов, но отказываясь выполнять команды.

  • Added: Сервер теперь стартует без конфигурации, отвечая на handshake и возвращая список инструментов.
  • Fixed: Исправлено поведение при отсутствии профиля: вызовы инструментов теперь корректно отказываются с понятным сообщением.
  • Added: В эндпоинт /health добавлено поле configured для проверки статуса привязки конфигурации.
  • Fixed: Исправлен аудит: теперь логируются попытки вызова инструментов даже при отсутствии конфигурации.
v2.3.3patch
🕐 1 мес назад · релиз на GitHub ↗

Исправлены критические ошибки остановки процессов SSH, добавлен аудит и улучшена параллельная обработка сессий.

  • Fixed: Исправлена логика проверки доступности сокета: теперь транспорт проверяется перед отправкой, предотвращая потерю пакетов на полуоткрытых соединениях.
  • Fixed: Устранена проблема, при которой таймаут выполняемой команды оставлял процесс запущенным; теперь поздние каналы корректно останавливаются.
  • Fixed: Команда close-session теперь реально завершает удалённый процесс (SIGINT, TERM, KILL) вместо простого закрытия канала.
  • Fixed: Улучшена эскалация сигналов: добавлена задержка для завершения цепочки сигналов и исключено ожидание пустых операций.
  • Added: Введён аудит операций закрытия сессий и соединений; изменения не требуют согласования через политику безопасности.
v2.3.0minor
🕐 1 мес назад · релиз на GitHub ↗

Исправлена поддержка конфигурационных файлов на Windows, улучшена обработка ошибок и добавлены тесты для Windows.

  • Fixed: Наконец-то реализована корректная проверка прав доступа к конфигу на Windows через ACL, так как POSIX-права там не работают.
  • Fixed: Исправлена ошибка, из-за которой существующий, но некорректный конфигурационный файл ошибочно сообщался как отсутствующий.
  • Fixed: Улучшено форматирование сообщений об ошибках: ошибки конфигурации теперь выводятся как текст с кодом выхода 2, а не как стек вызовов.
  • Added: Добавлен флаг --allowUncheckedConfigAcl для принудительной загрузки конфигураций с непроверяемыми правами доступа.
  • Added: В CI добавлены тесты для Windows, ранее ветки win32 не проверялись автоматически.
v2.2.6patch
🕐 1 мес назад · релиз на GitHub ↗

Исправлены описания решений безопасности, улучшена диагностика ошибок SSH и детализация сбоев аутентификации.

  • Fixed: Атрибут binary теперь корректно указывает команду, запущенную с повышенными привилегиями, а не префикс.
  • Fixed: Ошибка HOST_KEY_MISMATCH теперь выводит полные отпечатки ключей и различает смену сервера и MITM-атаку.
  • Fixed: При сбое аутентификации сообщается конкретный запрошенный метод и причина неудачи, а не все доступные варианты.
v2.2.5patch
🕐 1 мес назад · релиз на GitHub ↗

Исправлено ослабление контроля привилегий: добавлены пропущенные бинарники повышения привилегий в явный список.

  • Fixed: В список PRIVILEGE_PREFIXES добавлены su-exec, gosu, sudo-rs, run0 и pfexec для корректной блокировки.
  • Fixed: Устранена уязвимость безопасности, вызванная заменой regex на точное совпадение в версии 2.2.4.
  • Fixed: Исправлена ошибка классификации, из-за которой команды с новыми бинарниками считались безопасными.
v2.2.4patchbreaking
🕐 1 мес назад · релиз на GitHub ↗

Критическое исправление уязвимости (CVSS 8.8), позволявшей обходить ограничения чтения и эскалировать привилегии через обёртки.

  • Fixed: Устранена уязвимость обхода контроля доступа и эскалации привилегий через команды env и find (GHSA-6f54-mjqq-2jp8, CVSS 8.8).
  • Fixed: Классификатор команд теперь анализирует фактическое выполнение, а не только имена бинарных файлов, предотвращая запуск опасных операций в режиме read-only.
  • Breaking: Команда env без аргументов больше не считается безопасной для чтения; сложные конструкции с sudo в профилях prod теперь блокируются, если не настроены явно.
v2.2.3patch
🕐 1 мес назад · релиз на GitHub ↗

Исправлена обработка лимита длины команд в конфиге и устранена уязвимость DoS через нелинейную классификацию.

  • Fixed: В конфигурационном файле значение commandMaxChars = 0 теперь корректно означает отсутствие лимита, а не ошибку запуска.
  • Fixed: Классификация команд переписана для линейной сложности, что устраняет зависание сервера при обработке длинных команд.
  • Fixed: Исправлена логика нормализации: значение 0 в конфиге преобразуется в максимальное целое число, чтобы избежать ложных отказов.
  • Added: Добавлена возможность явно отключить ограничение длины команд через конфиг, синхронизированно с поведением CLI-флага.
v2.2.2patch
🕐 1 мес назад · релиз на GitHub ↗

Исправлена логика подтверждения команд, увеличен таймаут до 10 минут и восстановлена работа флагов CLI.

  • Fixed: Исправлена ошибка, из-за которой подтверждение команды приводило к отказу; теперь достаточно одного нажатия.
  • Fixed: Таймаут ожидания подтверждения увеличен с 60 секунд до 10 минут.
  • Fixed: Улучшено сообщение об ошибке: теперь явно указывается истечение времени ожидания.
  • Fixed: Восстановлена работа флагов --disableApproval, --auditEntropyScan и --auditTamperEvident.
v2.2.0minorbreaking
🕐 1 мес назад · релиз на GitHub ↗

v2.2.0: строгая валидация конфигурации, активация раздела [policy] и отказ от молчаливых ошибок при запуске.

  • Breaking: Введена строгая валидация конфига: запуск падает при наличии неизвестных секций, опечаток в классах команд или некорректных ролях.
  • Added: Полностью активирован раздел [policy]: теперь можно задавать roleBindings и denylist без использования OPA-сайдкара.
  • Fixed: Устранено молчаливое игнорирование ошибок: теперь все проблемы с конфигурацией сообщаются сразу, а не скрываются.
  • Fixed: Исправлено поведение неопределенных тиров: больше нет скрытого падения на строгие дефолтные значения prod.
  • Breaking: Пользовательские роли в профилях теперь требуют явного описания в [policy.roleBindings], иначе запуск прерывается.
v2.1.0minor
🕐 1 мес назад · релиз на GitHub ↗

Добавлена опция --group для указания группы хоста и улучшено сообщение об отказе в доступе.

  • Added: Добавлен флаг --group, принимающий значения prod, staging или dev.
  • Fixed: Улучшено сообщение об отказе в доступе: теперь оно указывает роль, группу и класс команд.
  • Fixed: Исправлена проблема, из-за которой профили без конфигурации не могли запускать sudo.
v2.0.4patchbreaking
🕐 1 мес назад · релиз на GitHub ↗

Исправлена критическая уязвимость в read-command: теперь любые shell-метасимволы запрещены, что предотвращает выполнение произвольных команд.

  • Fixed: Устранена уязвимость в read-command: ранее подстановка команд через $(...) и обратные кавычки позволяла обойти проверку на только-для-чтения.
  • Breaking: Команды с использованием синтаксиса оболочки (например, echo $HOME или конвейеры) больше не классифицируются как read-only и требуют одобрения через run-command.
  • Fixed: Механизм проверки теперь блокирует любые символы с синтаксическим значением для оболочки, а не только отдельные опасные конструкции.
  • Added: Рекомендуется обновление всем пользователям роли viewer или использующим read-command как границу безопасности.
v2.0.1patch
🕐 1 мес назад · релиз на GitHub ↗

Исправлено зависание сервера при выводе команд, усилен криптографический рандом для маркеров сессий и улучшены регулярные выражения для фильтрации.

  • Fixed: Устранено зависание event-loop при выводе удалённых команд из-за неэффективной регулярки для обрезки символов новой строки.
  • Fixed: Маркеры сессий теперь генерируются через криптографически стойкий CSPRNG, что предотвращает подделку кодов выхода и рабочей директории.
  • Fixed: Улучшены регулярные выражения для blacklist-паттернов, устранена возможность ложных срабатываний из-за конфликта совпадений пробелов.