AIKraft Agents

tufantunc/ssh-mcp

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

MCP⭐ 858TypeScriptпоследний релиз: v2.23.0
Открыть на 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.23.0majorbreaking
🕐 2 дн назад · релиз на GitHub ↗

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

  • Fixed: Устранена уязвимость GHSA-5m7x-xwpc-pp79: исправлено обхождение классификатора безопасности через значения опций (например, git -c, scp -o) и переменных окружения (например, GIT_SSH_COMMAND), которые
  • Breaking: Классификатор команд теперь строго анализирует значения опций и присваивания окружения; команды, использующие такие префиксы, могут потребовать подтверждения или быть заблокированы в зависимости от пр
  • Fixed: Улучшено распознавание командных префиксов: теперь корректно обрабатываются значения, переданные через знак равно, кавычки или слитно с ключом опции (git -c, apt -o, rsync --rsync-path= и др.).
v2.22.2patch
🕐 2 дн назад · релиз на GitHub ↗

Исправлена уязвимость, при которой короткие пароли с низкой энтропией выводились в открытом виде в логах и выводах команд.

  • Fixed: Устранена уязвимость GHSA-95pj-qcm9-m3m9: теперь маскируются короткие учетные данные с низкой энтропией в полях, указывающих на секрет (password, token, psk и др.).
  • Fixed: Улучшена логика редактирования: защита применяется к текстовым присваиваниям, строкам UCI и значениям из uci show, предотвращая утечку в файлы, сессии и журналы аудита.
  • Fixed: Сохранена обратная совместимость: такие параметры, как password_min, PasswordAuthentication и persist_key, остаются без изменений и не маскируются.
v2.22.1patch
🕐 3 дн назад · релиз на GitHub ↗

Обновление OpenTelemetry до версий 0.300 и 3.0.0, а также обновление зависимостей и исправление уязвимостей.

  • Fixed: Обновлены пакеты OpenTelemetry: @opentelemetry/sdk-node и exporter до 0.300.0, resources до 3.0.0.
  • Fixed: Обновлены версии @modelcontextprotocol/sdk, @napi-rs/keyring и @types/node.
  • Fixed: Обновлены транзитивные зависимости: express до 5.3.0, hono до 4.13.16, @hono/node-server до 2.1.5.
  • Fixed: Устранена уязвимость GHSA-rmxm-3fg6-px4f через обновление зависимостей.
  • Fixed: Обновлена версия @opentelemetry/api до 1.10.0.
v2.22.0majorbreaking
🕐 11 дн назад · релиз на GitHub ↗

Исправлена критическая уязвимость в классификаторе команд SSH-MCP, позволявшая обходить политику безопасности.

  • Breaking: Ужесточена логика классификатора команд: теперь учитываются пути к директориям, суффиксы .exe и регистр, что может привести к отказу в выполнении или запросу подтверждения.
  • Fixed: Исправлена уязвимость GHSA-x567-334m-mr3c, позволявшая обходить политику безопасности за счет неправильной обработки аргументов обёрток (flock, chroot, strace) и особенностей именования.
  • Fixed: Команды `command -v` и `command -V` теперь корректно распознаются как операции поиска, а не получают класс выполнения команды, указанной в аргументе.
  • Fixed: Внедрено строгое чтение аргументов обёрток exec с использованием единого алгоритма анализа для устранения неоднозначностей.
v2.21.0minorbreaking
🕐 11 дн назад · релиз на GitHub ↗

В SSH-MCP v2.21.0 добавлена горячая перезагрузка конфигурации через SIGHUP и новый инструмент reload-config.

  • Added: Конфигурационный файл config.toml теперь можно перезагружать без перезапуска сервера.
  • Added: Добавлен инструмент reload-config для проверки статуса и принудительной перезагрузки настроек.
  • Breaking: Сигнал SIGHUP больше не останавливает сервер, а инициирует перезагрузку конфигурации.
  • Breaking: Конфигурация с дублирующимися именами профилей теперь отвергается, ранее использовался первый профиль.
  • Added: Изменено поведение HTTP-сервера: он больше не завершается при закрытии терминала.
v2.20.2patch
🕐 14 дн назад · релиз на GitHub ↗

Исправлена логика обработки правил безопасности (policy), улучшено распознавание операций и запрещённых фраз.

  • Fixed: Исправлено чтение операций в правилах безопасности: теперь корректно обрабатываются кластеры в любом порядке, разделённые флаги, длинные формы, корневые цели, разрешающие режимы записи, форматы устрой
  • Fixed: Устранена ошибка, при которой упоминание запрещённой фразы ошибочно отвергалось как попытка выполнения команды.
v2.20.1patch
🕐 15 дн назад · релиз на GitHub ↗

Обновление зависимостей: повышение безопасности SDK MCP и поддержка @napi-rs/keyring v2 с улучшенным логированием ошибок.

  • Fixed: Обновлен @modelcontextprotocol/sdk до ^1.32.1 для устранения уязвимостей, позволяющих исчерпать память сервера через HTTP-запросы.
  • Added: Разрешена установка @napi-rs/keyring версии 2.x для профилей с аутентификацией keychain.
  • Fixed: Ошибки доступа к хранилищу ключей теперь явно логируются, а не скрываются, хотя итоговое поведение поиска учетных данных не изменилось.
v2.20.0majorbreaking
🕐 15 дн назад · релиз на GitHub ↗

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

  • Fixed: Устранена уязвимость GHSA-cm4c-4q74-mgmj: исправлена классификация опасных инструментов (sqlite3, tar, gdb, docker, systemd-run и др.), которые ранее ошибочно считались безопасными.
  • Breaking: Изменено поведение классификатора: команды, ранее выполнявшиеся автоматически, теперь требуют подтверждения или могут быть заблокированы в зависимости от профиля.
  • Fixed: Расширен список распознаваемых обходных путей и брокеров привилегий, включая поддержку различных форматов флагов, алиасов и специфик Windows.
v2.19.2patch
🕐 15 дн назад · релиз на GitHub ↗

Исправлена уязвимость: пароль sudo теперь не отображается в логах, а вводstdin принудительно закрывается.

  • Fixed: Пароль sudo больше не выводится в командный вывод, что устраняет риск его утечки.
  • Fixed: Стандартный ввод (stdin) принудительно закрывается (EOF), чтобы предотвратить интерактивные запросы.
  • Fixed: В журналах аудита и запросах одобрения теперь явно указано закрытие stdin через exec 0</dev/null.
v2.19.1patch
🕐 22 дн назад · релиз на GitHub ↗

Улучшена диагностика ошибок для команд с метасимволами и обновлён SDK MCP для устранения уязвимостей.

  • Fixed: Уточнены сообщения об отказе в чтении: теперь явно указывается наличие shell-метасимволов в пути, а не только имя профиля.
  • Fixed: Обновлён требуемый пакет @modelcontextprotocol/sdk до версии ^1.31.0.
  • Fixed: Устранены ложные срабатывания сканеров зависимостей, связанные с уязвимостями в старых версиях SDK и proxy-addr.
v2.19.0patch
🕐 24 дн назад · релиз на GitHub ↗

Исправлена уязвимость GHSA-rrxj-hcj2-vwm6: усилены правила запрета записи в критические системные пути.

  • Fixed: Устранена уязвимость GHSA-rrxj-hcj2-vwm6, позволявшая обходить ограничения записи.
  • Fixed: Запрещена запись в критические пути (/etc/cron, /etc/systemd, authorized_keys) через SFTP, редиректы, tee, cp, mv, install и dd.
  • Fixed: Усилены встроенные правила запрета (never-allowed rules).
v2.17.0minorbreaking
🕐 1 мес назад · релиз на GitHub ↗

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

  • Breaking: Бездействующие HTTP-сессии теперь истекают после TTL (по умолчанию 30 минут) или вытесняются при достижении лимита в 64 сессии.
  • Fixed: Некорректно завершенные клиентами сессии больше не занимают место навсегда, освобождая слоты для новых подключений.
  • Fixed: Внутренние ошибки сервера теперь возвращают код 500 и запись в stderr, а не приводят к необработанным исключениям.
  • Added: Обновлены зависимости OpenTelemetry, SDK MCP и другие пакеты до актуальных версий.
v2.16.0minorbreaking
🕐 1 мес назад · релиз на GitHub ↗

В версии 2.16.0 клиенты IPv6 теперь группируются по подсети /64 для общих лимитов аутентификации и запросов.

  • Breaking: Клиенты IPv6 теперь идентифицируются по подсети /64, а не по полному адресу, что объединяет бюджеты лимитов для всей сети.
  • Added: Нормализация IPv6-адресов: разные записи (регистр, ведущие нули, суффиксы зоны) теперь приводят к одному ключу клиента.
  • Added: IPv4-адреса, инкапсулированные в IPv6 (например, ::ffff: или NAT64), теперь корректно группируются как IPv4-клиенты.
  • Fixed: Параметры --authFailureLimit и --rateLimit теперь корректно применяют общие лимиты для хостов, находящихся за одним /64.
v2.13.0minorbreaking
🕐 1 мес назад · релиз на GitHub ↗

В v2.13.0 профиль read-only теперь проверяет аргументы команд по грамматике, а не только их имена.

  • Breaking: read-only теперь требует, чтобы каждый аргумент разрешённой команды (cat, grep и др.) соответствовал строгой грамматике бинарного файла, а не просто совпадал с именем.
  • Breaking: Команды, ранее работавшие в профилях readOnly или роли viewer, теперь могут быть отклонены, если их синтаксис не проходит новую проверку.
  • Fixed: При отказе в выполнении система указывает конкретное запрещённое слово, помогая пользователю найти допустимый вариант синтаксиса.
  • Added: Добавлены строгие ограничения для таких команд, как uniq, ifconfig, find, git remote show и sort на Windows, исключающие опасные аргументы.
v2.12.0minorbreaking
🕐 1 мес назад · релиз на GitHub ↗

Ужесточена классификация команд: закрыты лазейки для обхода политик безопасности через интерпретаторы и аргументы sort.

  • Breaking: Команды с незнакомыми бинарниками теперь классифицируются как privileged, если содержат эскалацию прав, что может вызвать запрос подтверждения.
  • Fixed: sort --compress-program=<path> больше не считается read-only, так как позволяет запускать произвольные программы.
  • Added: Расширен список интерпретаторов (osascript, lua, bun, deno, pwsh) для корректной проверки безопасности передаваемых им команд.
  • Fixed: Исправлена обработка коротких и длинных аргументов в sort, чтобы исключить обход ограничений через префиксы или кластеры флагов.
v2.11.0minorbreaking
🕐 1 мес назад · релиз на GitHub ↗

Улучшена прозрачность аудита sftp-upload и добавлена маркировка сессий агентов через переменную окружения.

  • Fixed: В аудите и запросе подтверждения sftp-upload теперь детально описываются параметры загрузки (размер, хеш), а не только путь назначения.
  • Breaking: Изменение формата строки аудита sftp-upload может сломать существующие правила denylist, привязанные к полному тексту команды.
  • Added: Команды и сессии теперь передают переменную окружения AI_AGENT=ssh-mcp, позволяя операторам отличать сессии агентов от пользовательских.
  • Added: Добавлено поле конфигурации announceAgent, позволяющее отключить отправку переменной AI_AGENT на конкретные хосты.
v2.10.0minorbreaking
🕐 1 мес назад · релиз на GitHub ↗

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

  • Fixed: Инструменты sftp-list и sftp-download теперь корректно работают в профилях с readOnly, как и заявлено в документации.
  • Breaking: Пространство имен команд sftp: и session: зарезервировано; run-command и read-command отказываются выполнять команды с такими префиксами.
  • Fixed: Добавлена строгая валидация удаленных путей для sftp-upload и sftp-download, исключающая пустые, слишком длинные или содержащие управляющие символы пути.
  • Fixed: Разрешено использование символов нулевой ширины ZWNJ и ZWJ, необходимых для корректного отображения персидского и индийских шрифтов.
v2.9.1patch
🕐 1 мес назад · релиз на GitHub ↗

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

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

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

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

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

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

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

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

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

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

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

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

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

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