Files
server-manager/README.md
chrome-storm-c442 2d1d942ddc docs: fix skill syntax, update fallback generator, add progress docs
- Fix --info/--set-note syntax in CLAUDE.md (global flags, not per-alias)
- Add --remove, --install-key to CLAUDE.md examples
- Replace minimal fallback skill generator with full version (security rules, all commands, progress, SFTP double-slash)
- Add upload/download progress reporting to skill-ssh.md and README
- Fix outdated v1.5.4 version in README build examples

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 07:43:15 -05:00

491 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ServerManager
<p align="center">
<strong>Desktop GUI for managing remote servers</strong><br>
CustomTkinter + Paramiko | Dark Theme | Claude Code Integration
</p>
<p align="center">
<a href="#english">English</a> |
<a href="#русский">Русский</a> |
<a href="#中文">中文</a>
</p>
---
## 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)
- **Claude Code Integration** — one-click setup, shared config with `/ssh` skill
- **TOTP / 2FA** — Google Authenticator compatible codes with live countdown, one-click copy
- **Encryption** — servers.json encrypted with Fernet (passwords never stored in plaintext)
- **Backups** — manual and automatic backups with one-click restore
- **Configurable Config Path** — change servers.json location via GUI
- **Localization** — GUI in English, Russian, Chinese with language switcher
- **About Dialog** — app info, features, quick start guide
- **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-vX.Y.Z-{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. **Setup** — Setup tab → "Install Everything" → Claude Code ready
7. Status badges update automatically (green = online, red = offline)
### Claude Code Integration
ServerManager and Claude Code share the same config file: `~/.server-connections/servers.json`
**How it works:**
```
ServerManager GUI ←→ ~/.server-connections/servers.json ←→ ssh.py (Claude Code)
↕ ↕
Add/edit/delete /ssh skill
servers in GUI executes commands
```
- Add a server in GUI → Claude Code sees it immediately via `/ssh list`
- Both use the same `ssh.py` + `servers.json`
- Passwords **never** pass through the AI API
**New SSH Commands:**
- `ssh.py --info ALIAS` — safe server information (no credentials)
- `ssh.py --set-note ALIAS "desc"` — update server notes
- `ssh.py --list` now shows Notes column
- Fuzzy alias search: search by keyword (e.g., "tor" finds "API TOR contabo..."), word-boundary priority
- SFTP path fix: remote path normalization for Windows/Git Bash with double slash //
- `--no-sudo` flag for commands that don't need elevation
- Upload/download progress: files >=1MB show 25/50/75% milestones with size, time, and speed
**Setup on a new machine:**
1. Install ServerManager (clone repo or download binary)
2. Open Setup tab → click "Install Everything"
3. Done. Claude Code now has `/ssh` skill and access to your servers
The Setup tab installs:
- `ssh.py``~/.server-connections/` (SSH utility)
- `encryption.py``~/.server-connections/` (encryption module for CLI)
- `/ssh` skill → `~/.claude/commands/ssh.md` (Claude Code skill)
- SSH key (ed25519) — if not exists
- Checks for duplicates — safe to run multiple times
### Configuration
Shared config location: `~/.server-connections/servers.json` (encrypted with Fernet).
The config path can be changed via Setup tab → Configuration → "Change Path".
Settings are stored in `~/.server-connections/settings.json`.
**Backups:**
- Automatic backups every 10 minutes (on save)
- Manual backup via Setup tab → "Backup Now"
- Restore from any backup via dropdown + "Restore"
- Backups stored in `~/.server-connections/backups/`
- Pre-encryption backup created automatically on first migration
### 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
- `servers.json` is **encrypted** (Fernet symmetric encryption) — passwords not readable in plaintext
- `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 encrypted file
- Automatic pre-encryption backup on first migration
### Project Structure
```
ServerManager/
├── main.py # Entry point
├── version.py # Version info
├── build.py # PyInstaller build script
├── core/ # Business logic
│ ├── server_store.py # CRUD + encrypted JSON + observer + backups
│ ├── encryption.py # Fernet encryption module
│ ├── ssh_client.py # Paramiko SSH/SFTP wrapper
│ ├── claude_setup.py # Claude Code integration installer
│ ├── status_checker.py # Background monitoring
│ ├── totp.py # TOTP/2FA module (pyotp)
│ ├── logger.py # Rotating file logger
│ └── 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, Setup
│ └── widgets/ # StatusBadge
├── tools/ # CLI tools (installed to ~/.server-connections/)
│ ├── ssh.py # SSH utility for Claude Code
│ └── skill-ssh.md # /ssh skill template
├── config/ # Example configs
├── releases/ # Built executables
└── README.md # This file (EN/RU/ZH)
```
### Deploy on a new machine
```bash
# 1. Clone
git clone https://git.sensey24.ru/aibot777/server-manager.git
cd server-manager
# 2. Install deps
pip install -r requirements.txt
# 3. Launch and setup
python main.py
# → Setup tab → Install Everything
# → Add your servers via + Add
# → Done! Both GUI and Claude Code are ready
```
---
## Русский
### Возможности
- **Управление серверами** — добавление, редактирование, удаление (SSH, Telnet, RDP, MariaDB, MSSQL, PostgreSQL)
- **SSH-терминал** — выполнение команд с авто-sudo (пароль через stdin, не виден в `ps`)
- **SFTP** — загрузка и скачивание файлов с прогресс-баром
- **SSH-ключи** — генерация ed25519, установка на сервер, копирование
- **Мониторинг** — фоновая проверка каждые 60 сек (бейджи online/offline)
- **Интеграция с Claude Code** — установка в один клик, общий конфиг со скиллом `/ssh`
- **TOTP / 2FA** — коды Google Authenticator с обратным отсчётом, копирование в один клик
- **Шифрование** — servers.json зашифрован Fernet (пароли не хранятся в открытом виде)
- **Бэкапы** — ручные и автоматические с восстановлением в один клик
- **Настраиваемый путь конфига** — смена расположения servers.json через GUI
- **Локализация** — интерфейс на английском, русском, китайском с переключателем
- **О программе** — информация о приложении, возможности, быстрый старт
- **Тёмная тема** — современный интерфейс 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-vX.Y.Z-{платформа}.exe`
### Использование
1. **Запуск**`python main.py` или запустите скомпилированный файл
2. **Добавить сервер** — нажмите "+ Add" в боковой панели, заполните alias, IP, порт, пользователь, пароль, тип
3. **Терминал** — выберите сервер → вкладка Terminal → введите команду → Run
4. **Файлы** — выберите сервер → вкладка Files → укажите пути → Upload/Download
5. **Ключи** — вкладка Keys → Generate Key → Install on Server
6. **Настройка Claude** — вкладка Setup → "Install Everything" → Claude Code готов
7. Бейджи статуса обновляются автоматически (зелёный = online, красный = offline)
### Интеграция с Claude Code
ServerManager и Claude Code используют **один и тот же файл конфигурации**: `~/.server-connections/servers.json`
**Как это работает:**
```
ServerManager GUI ←→ ~/.server-connections/servers.json ←→ ssh.py (Claude Code)
↕ ↕
Добавил/изменил скилл /ssh
сервер в GUI выполняет команды
```
- Добавил сервер в GUI → Claude Code сразу видит его через `/ssh list`
- Оба используют один `ssh.py` + `servers.json`
- Пароли **никогда** не проходят через API нейронки
**Новые SSH команды:**
- `ssh.py --info ALIAS` — безопасная информация о сервере (без учетных данных)
- `ssh.py --set-note ALIAS "desc"` — обновление заметок сервера
- `ssh.py --list` теперь показывает колонку Notes
- Нечеткий поиск по алиасу: поиск по ключевому слову (например, "tor" находит "API TOR contabo..."), приоритет границ слова
- Исправление пути SFTP: нормализация удаленного пути для Windows/Git Bash с двойным слешем //
- Флаг `--no-sudo` для команд, не требующих повышения привилегий
- Прогресс upload/download: файлы >=1MB показывают 25/50/75% с размером, временем и скоростью
**Настройка на новой машине:**
1. Установить ServerManager (клонировать репо или скачать бинарник)
2. Открыть вкладку Setup → нажать "Install Everything"
3. Готово. Claude Code теперь имеет скилл `/ssh` и доступ к серверам
Вкладка Setup устанавливает:
- `ssh.py``~/.server-connections/` (SSH-утилита)
- `encryption.py``~/.server-connections/` (модуль шифрования для CLI)
- скилл `/ssh``~/.claude/commands/ssh.md` (скилл Claude Code)
- SSH-ключ (ed25519) — если ещё не создан
- Проверяет дубли — безопасно запускать повторно
### Конфигурация
Общий конфиг: `~/.server-connections/servers.json` (зашифрован Fernet).
Путь к конфигу можно изменить: вкладка Setup → Configuration → "Change Path".
Настройки хранятся в `~/.server-connections/settings.json`.
**Бэкапы:**
- Автоматические бэкапы каждые 10 минут (при сохранении)
- Ручной бэкап: вкладка Setup → "Backup Now"
- Восстановление из любого бэкапа через dropdown + "Restore"
- Бэкапы хранятся в `~/.server-connections/backups/`
- Пред-шифровальный бэкап создаётся автоматически при первой миграции
### Авто-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)
```
### Безопасность
- `servers.json` **зашифрован** (Fernet симметричное шифрование) — пароли не читаемы в открытом виде
- `servers.json` в `.gitignore` — никогда не коммитится
- Пароли хранятся только локально, **никогда не передаются в AI/API**
- SSH-ключи (ed25519) — рекомендуемый метод аутентификации
- sudo-пароль передаётся через stdin (не виден в списке процессов)
- При использовании с Claude Code: через API нейронки проходят только alias + команда, пароли остаются в зашифрованном локальном файле
- Автоматический пред-шифровальный бэкап при первой миграции
### Развёртывание на новой машине
```bash
# 1. Клонировать
git clone https://git.sensey24.ru/aibot777/server-manager.git
cd server-manager
# 2. Установить зависимости
pip install -r requirements.txt
# 3. Запустить и настроить
python main.py
# → Вкладка Setup → Install Everything
# → Добавить серверы через + Add
# → Готово! GUI и Claude Code работают с одним конфигом
```
---
## 中文
### 功能特点
- **服务器管理** — 添加、编辑、删除服务器SSH、Telnet、RDP、MariaDB、MSSQL、PostgreSQL
- **SSH终端** — 自动sudo执行命令密码通过stdin传递`ps`中不可见)
- **SFTP传输** — 带进度条的文件上传/下载
- **SSH密钥** — 生成ed25519、安装到服务器、复制到剪贴板
- **状态监控** — 每60秒后台检查在线/离线徽标)
- **Claude Code集成** — 一键设置,与`/ssh`技能共享配置
- **TOTP / 2FA** — 兼容Google Authenticator的验证码实时倒计时一键复制
- **加密** — servers.json使用Fernet加密密码不再以明文存储
- **备份** — 手动和自动备份,一键恢复
- **可配置路径** — 通过GUI更改servers.json位置
- **多语言** — 支持英语、俄语、中文界面切换
- **关于对话框** — 应用信息、功能特点、快速入门
- **深色主题** — 现代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-vX.Y.Z-{平台}.exe`
### 使用方法
1. **启动**`python main.py` 或运行可执行文件
2. **添加服务器** — 点击侧栏 "+ Add"填写别名、IP、端口、用户名、密码、类型
3. **终端** — 选择服务器 → Terminal标签 → 输入命令 → Run
4. **文件** — 选择服务器 → Files标签 → 设置路径 → Upload/Download
5. **密钥** — Keys标签 → Generate Key → Install on Server
6. **设置Claude** — Setup标签 → "Install Everything" → Claude Code就绪
7. 状态徽标自动更新(绿色 = 在线,红色 = 离线)
### Claude Code集成
ServerManager和Claude Code共享**同一个配置文件**`~/.server-connections/servers.json`
**工作原理:**
```
ServerManager GUI ←→ ~/.server-connections/servers.json ←→ ssh.py (Claude Code)
↕ ↕
在GUI中添加/编辑 /ssh技能
服务器 执行命令
```
- 在GUI中添加服务器 → Claude Code立即通过 `/ssh list` 看到
- 两者使用相同的 `ssh.py` + `servers.json`
- 密码**绝不**通过AI API传递
**在新机器上设置:**
1. 安装ServerManager克隆仓库或下载二进制文件
2. 打开Setup标签 → 点击 "Install Everything"
3. 完成。Claude Code现在拥有 `/ssh` 技能并可访问您的服务器
Setup标签安装
- `ssh.py``~/.server-connections/`SSH工具
- `encryption.py``~/.server-connections/`CLI加密模块
- `/ssh` 技能 → `~/.claude/commands/ssh.md`Claude Code技能
- SSH密钥ed25519— 如果不存在
- 检查重复 — 可安全重复运行
### 配置
共享配置位置:`~/.server-connections/servers.json`Fernet加密
可通过 Setup标签 → Configuration → "Change Path" 更改配置路径。
设置存储在 `~/.server-connections/settings.json`
**备份:**
- 每10分钟自动备份保存时
- 手动备份Setup标签 → "Backup Now"
- 从任何备份恢复:下拉菜单 + "Restore"
- 备份存储在 `~/.server-connections/backups/`
- 首次迁移时自动创建加密前备份
### 自动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自动输入)
```
### 安全性
- `servers.json` **已加密**Fernet对称加密— 密码无法以明文读取
- `servers.json``.gitignore` 中 — 永不提交
- 密码仅存储在本地,**绝不发送到任何AI/API**
- SSH密钥ed25519— 推荐的认证方式
- sudo密码通过stdin传递在进程列表中不可见
- 与Claude Code配合使用时只有别名和命令通过AI API传递密码保留在本地加密文件中
- 首次迁移时自动创建加密前备份
### 在新机器上部署
```bash
# 1. 克隆
git clone https://git.sensey24.ru/aibot777/server-manager.git
cd server-manager
# 2. 安装依赖
pip install -r requirements.txt
# 3. 启动并设置
python main.py
# → Setup标签 → Install Everything
# → 通过 + Add 添加服务器
# → 完成GUI和Claude Code使用同一个配置
```
---
## License
MIT
## Author
[aibot777](https://git.sensey24.ru/aibot777)