Skip to content
Neuronavt
Go back

SSH-командер с AI для управления серверами

Кейс9/10

Коротко

Автор создал локальную панель ssh-commander, объединяющую SSH-терминал, SFTP, Docker и AI-агента, который анализирует сервер и предлагает действия. Ключевой урок эксплуатации — изменения требуют подтверждения, а команды чтения ограничены allowlist: при расследовании обнаружилось, что нехватка прав на удаление в Yandex S3 остановила обновление бэкапа.

Контекст

Автор — разработчик нескольких веб-проектов и создатель открытого проекта lexuss1979/ssh-commander под лицензией MIT. Изначально ему требовалось изучить конфигурацию старого сервера и подготовить план переноса проектов; затем он решил объединить работу с серверами и помощь AI в одной локальной панели, сохранив ручную проверку действий.

Главное

Как сделано

Приложение запускается локально в Docker, интерфейс доступен в браузере, а к Linux-серверам подключается по SSH. В панели есть вкладки терминала, файлового менеджера SFTP, Docker и дополнительных разделов для PostgreSQL, MySQL, Nginx, systemd, портов и cron. Вывод терминала или логов можно передать агенту прямо из интерфейса; у каждого сервера есть файл памяти MEMORY.md, загрузка которого происходит в начале новой сессии, а изменения памяти требуют подтверждения.

Агент может самостоятельно читать обычные файлы, логи, сведения о контейнерах и свободном месте. Запись файлов, перезапуск контейнеров и команды оболочки требуют подтверждения. Для безопасного чтения используется exec_readonly с разрешающим списком команд и проверкой флагов; конвейеры, перенаправления и подстановки запрещены. Интерпретаторы и сетевые клиенты не входят в список. Режим планирования строит план по уже собранным сведениям, без инструментов; одобрение плана не снимает подтверждений для отдельных изменений.

Версия 0.1.1 запускается в Linux или macOS командами: mkdir ssh-commander cd ssh-commander curl —fail —location https://raw.githubusercontent.com/lexuss1979/ssh-commander/v0.1.1/docker-compose.release.yml —output compose.yaml docker compose up -d Затем нужно открыть http://localhost:8080, задать пароль панели и добавить сервер. AI требует собственного API-ключа; доступны пресеты провайдеров и настройка OpenAI-совместимого API с вызовом инструментов. В статье указаны TypeScript, Node.js и ssh2 на бэкенде, React и xterm.js на фронтенде; автор использует deepseek-v4-flash.

Результаты

В рабочем примере агент обнаружил дубли PDF и предложил освободить почти 1,5 ГБ. При расследовании последствий переноса документов в Yandex S3 выяснилось, что удаление дублей вызвало попытку удалить соответствующие объекты в S3, но у сервисного аккаунта не было нужных прав. Синхронизация падала, и бэкап перестал обновляться. Приложение помогло выявить проблему до удаления оставшихся локальных файлов. Автор не приводит формальных замеров производительности или сравнений с другими инструментами.

Ограничения

Агент может предложить ошибочную команду: её нужно прочитать до подтверждения и проверить результат после выполнения; резервные копии всё равно необходимы. При использовании внешнего провайдера файлы и логи передаются ему. Защита секретов основана на шаблонах, может пропускать данные и не обезличивает логи; prompt injection в содержимом файлов и логов остаётся риском. Приложение рассчитано на одного пользователя и по умолчанию слушает 127.0.0.1. SSH-пароли, пароли БД и API-ключи хранятся локально открытым текстом, поэтому каталоги data/ и keys/ и резервные копии нужно защищать. Allowlist иногда требует подтверждать даже безобидные команды. Цена использования AI зависит от тарифа провайдера; конкретные расходы в статье не указаны.

Что взять себе

Читать оригинал, если…

Откройте оригинал, если нужны README и архитектура проекта, полный список функций, тесты фильтра команд или инструкции по установке на Windows.