Skip to content

xymox72/ssh

Repository files navigation

SSH Client (Electron + React + Redux-Saga)

📌 Описание проекта

Этот проект представляет собой SSH-клиент, разработанный на Electron с фронтендом на React и Redux-Saga.

Проект следует чистой архитектуре (Clean Architecture) с элементами DDD (Domain-Driven Design) и организован как монорепозиторий с использованием Yarn Workspaces.


🏗️ Монорепозиторий

Проект организован как монорепозиторий, состоящий из двух частей:

  • Бэкенд (apps/back/) – Electron-приложение, обрабатывающее SSH-сессии и взаимодействующее с системой.
  • Фронтенд (apps/front/) – React-приложение, обеспечивающее пользовательский интерфейс и управление терминалом через Redux-Saga.

🎯 Какие задачи решает проект?

  • ✅ Подключение к удалённому серверу через SSH.
  • ✅ Отправка команд и получение вывода.
  • ✅ Управление процессами на сервере.
  • ✅ Логирование SSH-сессий и ошибок.
  • ✅ Гибкость за счёт Redux-Saga.
  • ✅ Поддержка тёмной/светлой темы.

📌 Пользовательские требования (User Stories)

  • Как пользователь, я хочу подключаться к удалённому серверу через SSH, чтобы управлять процессами с удалённой машины.
  • Как пользователь, я хочу вводить команды в терминал и получать ответы, чтобы взаимодействовать с сервером в реальном времени.
  • Как разработчик, я хочу видеть логи команд и ошибок, чтобы анализировать, что происходит в SSH-сессии.
  • Как пользователь, я хочу переключать тему между светлой и тёмной, чтобы использовать удобный для глаз интерфейс.

⚙️ Бэкенд (Electron + Node.js)

📌 Сервисы и классы

  • SSHSession (Domain) – описывает модель SSH-сессии.
  • SSHService (Application) – управляет сессиями, отправляет команды.
  • SSHAdapter (Infrastructure) – низкоуровневый адаптер для работы с ssh2.
  • SSHHandler (IPC) – слушает команды от фронта через ipcMain.
  • ObservabilityService.ts – логирование через Winston.

🎨 Фронтенд (React + Redux-Saga)

📌 Сервисы и классы

📁 src/application/useCases – обработка команд

  • ConnectToSSH.ts – подключение к серверу.
  • DisconnectSSH.ts – разрыв соединения.
  • ExecuteCommand.ts – выполнение команд.
  • SSHFacade.ts – фасад для упрощённого доступа к SSH-функциям.
📁 src/domain/errors – обработка ошибок
  • CommandExecutionError.ts – ошибки выполнения команд.
  • ConnectionError.ts – ошибки подключения.
  • SSHErrors.ts – общее управление ошибками SSH.
📁 src/infrastructure – сервисы и адаптеры
  • ElectronAdapter.ts.ts – адаптер для передачи данных через Electron.
  • MockElectronAdapter.ts.ts – мок адаптер для иммитации передачи данных во время работы фронта
  • SSHAdapterStrategy.ts – стратегия выбора адаптера
📂 adapters/electron/ – взаимодействие с Electron
  • ISSHTransportAdapter.ts – адаптер для передачи данных через Electron.
📂 logging/ – логирование
  • logger.ts – конфигурация логирования.
  • ObservabilityService.ts – сервис для отслеживания работы приложения.
📂 storage/ – работа с локальными данными
  • ServerStorageService.ts – сохранение информации о серверах.
📁 src/store – управление состоянием через Redux
📂 serverList/ – управление списком серверов
  • actionType.ts – список доступных экшенов.
  • serverListSlice.ts – reducer для управления списком серверов.
  • serverListSaga.ts – обработка асинхронных операций.
📂 ssh/sagas/ – Redux-Saga для SSH-команд
📁 src/view/components/terminal/ – UI-компоненты терминала
📂 Message/ – отображение сообщений
  • Terminal.tsx – основной компонент терминала.
  • TerminalInput.tsx – поле ввода команд.
  • TerminalMessages.tsx – отображение списка сообщений.
  • terminal.scss – стили терминала.

📁 src/view/components/layout/ – UI-компоненты макета

  • ConnectedView.tsx – экран при успешном подключении.
  • DisconnectedView.tsx – экран при разрыве соединения.
  • DisconnectionControl.tsx – управление отключением.
  • StatusBar.tsx – строка состояния.

📁 src/view/components/serverList/ – управление серверами

  • AuthTypeSelector.tsx – выбор типа авторизации.
  • ServerForm.tsx – форма для ввода данных сервера.
  • ServerInput.tsx – поле ввода данных сервера.
  • ServerList.tsx – отображение списка серверов.
  • ServerSelector.tsx – выбор сервера для подключения.

🚀 Как запустить проект?

1️⃣ Установка зависимостей

yarn install

2️⃣ Запуск в режиме разработки

yarn dev:all  # Запускает фронт и бэк одновременно

3️⃣ Запуск фронтенда отдельно

yarn dev:front

4️⃣ Запуск Electron-бэка отдельно

yarn dev:back

5️⃣ Сборка продакшен-версии

yarn build:all

🎯 Принципы архитектуры

📌 Clean Architecture + DDD

Проект разделён на слои, что упрощает поддержку и расширение:

  • Domain (доменный слой) – содержит бизнес-логику (модели SSH-сессий, команды).
  • Application (слой приложения) – обработка команд, взаимодействие с доменом.
  • Infrastructure (инфраструктурный слой) – работа с внешними сервисами (SSH, Electron API).
  • View – фронтенд, отображение данных.
  • store - Redux, Redux-saga - шина между фронтэндом и Application

🔥 Преимущества такого подхода

  • 🎯 Чёткое разделение логики
  • 🔥 Гибкость в изменениях
  • 🚀 Масштабируемость

🛠 Дальнейшие планы

✅ Текущие фичи

  • Подключение по SSH.
  • Отправка команд и получение вывода.
  • Логирование ошибок.
  • Поддержка темной/светлой темы.

🔜 Запланировано

  • Написание тестов
  • Добавление состояний XState на фронте
  • Добавление поддержки WebSockets.
  • Загрузка списка серверов на электрон с сохранение на БД
  • Автоматическая реконнекция при разрыве соединения.
  • Улучшенный UI для работы с терминалом.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published