# ServerManager

Desktop GUI for managing remote servers
CustomTkinter + Paramiko | Dark Theme

English | Русский | 中文

--- ## English ### Features - **Server CRUD** — add, edit, delete servers (SSH, Telnet, RDP, MariaDB, MSSQL, PostgreSQL) - **SSH Terminal** — execute commands with auto-sudo (password via stdin, invisible in `ps`) - **SFTP Transfer** — upload/download files with progress bar - **SSH Keys** — generate ed25519, install on server, copy to clipboard - **Status Monitor** — background check every 60 sec (online/offline badges) - **Dark Theme** — modern CustomTkinter interface ### Installation #### From source ```bash git clone https://git.sensey24.ru/aibot777/server-manager.git cd server-manager pip install -r requirements.txt python main.py ``` #### Pre-built binary Download from [`releases/`](releases/) folder — standalone `.exe` (Windows) or binary (Linux/Mac). No Python installation required. ### Building Build for your current platform: ```bash pip install pyinstaller python build.py ``` Output goes to `releases/ServerManager-v1.0.0-{platform}.exe` ### Usage 1. **Launch** — `python main.py` or run the executable 2. **Add server** — click "+ Add" in sidebar, fill alias, IP, port, user, password, type 3. **Terminal** — select server → Terminal tab → type command → Run 4. **Files** — select server → Files tab → set paths → Upload/Download 5. **Keys** — Keys tab → Generate Key → Install on Server 6. Status badges update automatically (green = online, red = offline) ### Configuration On first launch, `config/servers.json` is created from template. Add servers via GUI or edit the JSON directly. ```json { "servers": [ { "alias": "my-server", "ip": "1.2.3.4", "port": 22, "user": "root", "password": "secret", "type": "ssh", "notes": "Production" } ] } ``` ### Auto-sudo The app automatically handles privilege escalation: - If `user: "root"` — commands execute directly, no sudo needed - If `user` is non-root — the app automatically wraps the command in `sudo -S` and feeds the password from `servers.json` via stdin - The password is **never** passed as a command-line argument (invisible in `ps aux`) - You just type the command (e.g. `systemctl restart nginx`) — the app decides whether sudo is needed and handles it - In the GUI terminal, the "sudo" checkbox is enabled by default for non-root users; uncheck it for commands that don't need elevation ``` You type: systemctl restart nginx App executes: sudo -S -p '' bash -c 'systemctl restart nginx' (password fed automatically via stdin from servers.json) ``` ### Security - `config/servers.json` is in `.gitignore` — never committed - Passwords stored locally only, **never sent to any AI/API** - SSH keys (ed25519) — recommended auth method - sudo password sent via stdin (not visible in process list) - When used with Claude Code: only alias + command are passed through the AI API, passwords stay in the local JSON file ### Project Structure ``` ServerManager/ ├── main.py # Entry point ├── version.py # Version info ├── build.py # PyInstaller build script ├── core/ # Business logic │ ├── server_store.py # CRUD + JSON + observer │ ├── ssh_client.py # Paramiko SSH/SFTP wrapper │ ├── status_checker.py # Background monitoring │ └── connection_factory.py ├── gui/ # CustomTkinter UI │ ├── app.py # Main window │ ├── sidebar.py # Server list + search │ ├── server_dialog.py # Add/Edit modal │ ├── tabs/ # Terminal, Files, Info, Keys │ └── widgets/ # StatusBadge ├── config/ # Server configs ├── releases/ # Built executables └── docs/ # Documentation ``` --- ## Русский ### Возможности - **Управление серверами** — добавление, редактирование, удаление (SSH, Telnet, RDP, MariaDB, MSSQL, PostgreSQL) - **SSH-терминал** — выполнение команд с авто-sudo (пароль через stdin, не виден в `ps`) - **SFTP** — загрузка и скачивание файлов с прогресс-баром - **SSH-ключи** — генерация ed25519, установка на сервер, копирование - **Мониторинг** — фоновая проверка каждые 60 сек (бейджи online/offline) - **Тёмная тема** — современный интерфейс CustomTkinter ### Установка #### Из исходников ```bash git clone https://git.sensey24.ru/aibot777/server-manager.git cd server-manager pip install -r requirements.txt python main.py ``` #### Готовый бинарник Скачайте из папки [`releases/`](releases/) — автономный `.exe` (Windows) или бинарник (Linux/Mac). Python не требуется. ### Сборка Сборка под текущую платформу: ```bash pip install pyinstaller python build.py ``` Результат в `releases/ServerManager-v1.0.0-{платформа}.exe` ### Использование 1. **Запуск** — `python main.py` или запустите скомпилированный файл 2. **Добавить сервер** — нажмите "+ Add" в боковой панели, заполните alias, IP, порт, пользователь, пароль, тип 3. **Терминал** — выберите сервер → вкладка Terminal → введите команду → Run 4. **Файлы** — выберите сервер → вкладка Files → укажите пути → Upload/Download 5. **Ключи** — вкладка Keys → Generate Key → Install on Server 6. Бейджи статуса обновляются автоматически (зелёный = online, красный = offline) ### Конфигурация При первом запуске `config/servers.json` создаётся из шаблона. Добавляйте серверы через GUI или редактируйте JSON напрямую. ### Авто-sudo Приложение автоматически повышает привилегии: - Если `user: "root"` — команды выполняются напрямую, sudo не нужен - Если пользователь не root — приложение автоматически оборачивает команду в `sudo -S` и само вводит пароль из `servers.json` через stdin - Пароль **никогда** не передаётся как аргумент командной строки (не виден в `ps aux`) - Вы просто вводите команду (например `systemctl restart nginx`) — приложение само решает, нужен sudo или нет, и само всё делает - В GUI-терминале checkbox "sudo" включён по умолчанию для non-root; отключите для команд, не требующих повышения ``` Вы вводите: systemctl restart nginx Приложение делает: sudo -S -p '' bash -c 'systemctl restart nginx' (пароль подставляется автоматически из servers.json через stdin) ``` ### Безопасность - `config/servers.json` в `.gitignore` — никогда не коммитится - Пароли хранятся только локально, **никогда не передаются в AI/API** - SSH-ключи (ed25519) — рекомендуемый метод аутентификации - sudo-пароль передаётся через stdin (не виден в списке процессов) - При использовании с Claude Code: через API нейронки проходят только alias + команда, пароли остаются в локальном JSON-файле --- ## 中文 ### 功能特点 - **服务器管理** — 添加、编辑、删除服务器(SSH、Telnet、RDP、MariaDB、MSSQL、PostgreSQL) - **SSH终端** — 自动sudo执行命令(密码通过stdin传递,在`ps`中不可见) - **SFTP传输** — 带进度条的文件上传/下载 - **SSH密钥** — 生成ed25519、安装到服务器、复制到剪贴板 - **状态监控** — 每60秒后台检查(在线/离线徽标) - **深色主题** — 现代CustomTkinter界面 ### 安装 #### 从源码安装 ```bash git clone https://git.sensey24.ru/aibot777/server-manager.git cd server-manager pip install -r requirements.txt python main.py ``` #### 预编译版本 从 [`releases/`](releases/) 文件夹下载 — 独立的 `.exe`(Windows)或二进制文件(Linux/Mac)。 无需安装Python。 ### 编译 为当前平台编译: ```bash pip install pyinstaller python build.py ``` 输出至 `releases/ServerManager-v1.0.0-{平台}.exe` ### 使用方法 1. **启动** — `python main.py` 或运行可执行文件 2. **添加服务器** — 点击侧栏 "+ Add",填写别名、IP、端口、用户名、密码、类型 3. **终端** — 选择服务器 → Terminal标签 → 输入命令 → Run 4. **文件** — 选择服务器 → Files标签 → 设置路径 → Upload/Download 5. **密钥** — Keys标签 → Generate Key → Install on Server 6. 状态徽标自动更新(绿色 = 在线,红色 = 离线) ### 配置 首次启动时,`config/servers.json` 从模板自动创建。 通过GUI添加服务器或直接编辑JSON文件。 ### 自动sudo 应用自动处理权限提升: - 如果 `user: "root"` — 命令直接执行,无需sudo - 如果用户不是root — 应用自动将命令包装在 `sudo -S` 中,并从 `servers.json` 通过stdin自动输入密码 - 密码**绝不**作为命令行参数传递(在 `ps aux` 中不可见) - 您只需输入命令(例如 `systemctl restart nginx`)— 应用自动判断是否需要sudo并处理 - 在GUI终端中,"sudo"复选框默认为非root用户启用;对于不需要提权的命令可以取消勾选 ``` 您输入: systemctl restart nginx 应用执行: sudo -S -p '' bash -c 'systemctl restart nginx' (密码从servers.json通过stdin自动输入) ``` ### 安全性 - `config/servers.json` 在 `.gitignore` 中 — 永不提交 - 密码仅存储在本地,**绝不发送到任何AI/API** - SSH密钥(ed25519)— 推荐的认证方式 - sudo密码通过stdin传递(在进程列表中不可见) - 与Claude Code配合使用时:只有别名和命令通过AI API传递,密码保留在本地JSON文件中 --- ## License MIT ## Author [aibot777](https://git.sensey24.ru/aibot777)