Describe automatic privilege escalation mechanism, password handling via stdin, and AI API security. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ServerManager
Desktop GUI for managing remote servers
CustomTkinter + Paramiko | Dark Theme
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
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/ folder — standalone .exe (Windows) or binary (Linux/Mac).
No Python installation required.
Building
Build for your current platform:
pip install pyinstaller
python build.py
Output goes to releases/ServerManager-v1.0.0-{platform}.exe
Usage
- Launch —
python main.pyor run the executable - Add server — click "+ Add" in sidebar, fill alias, IP, port, user, password, type
- Terminal — select server → Terminal tab → type command → Run
- Files — select server → Files tab → set paths → Upload/Download
- Keys — Keys tab → Generate Key → Install on Server
- 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.
{
"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
useris non-root — the app automatically wraps the command insudo -Sand feeds the password fromservers.jsonvia 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.jsonis 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
Установка
Из исходников
git clone https://git.sensey24.ru/aibot777/server-manager.git
cd server-manager
pip install -r requirements.txt
python main.py
Готовый бинарник
Скачайте из папки releases/ — автономный .exe (Windows) или бинарник (Linux/Mac).
Python не требуется.
Сборка
Сборка под текущую платформу:
pip install pyinstaller
python build.py
Результат в releases/ServerManager-v1.0.0-{платформа}.exe
Использование
- Запуск —
python main.pyили запустите скомпилированный файл - Добавить сервер — нажмите "+ Add" в боковой панели, заполните alias, IP, порт, пользователь, пароль, тип
- Терминал — выберите сервер → вкладка Terminal → введите команду → Run
- Файлы — выберите сервер → вкладка Files → укажите пути → Upload/Download
- Ключи — вкладка Keys → Generate Key → Install on Server
- Бейджи статуса обновляются автоматически (зелёный = 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界面
安装
从源码安装
git clone https://git.sensey24.ru/aibot777/server-manager.git
cd server-manager
pip install -r requirements.txt
python main.py
预编译版本
从 releases/ 文件夹下载 — 独立的 .exe(Windows)或二进制文件(Linux/Mac)。
无需安装Python。
编译
为当前平台编译:
pip install pyinstaller
python build.py
输出至 releases/ServerManager-v1.0.0-{平台}.exe
使用方法
- 启动 —
python main.py或运行可执行文件 - 添加服务器 — 点击侧栏 "+ Add",填写别名、IP、端口、用户名、密码、类型
- 终端 — 选择服务器 → Terminal标签 → 输入命令 → Run
- 文件 — 选择服务器 → Files标签 → 设置路径 → Upload/Download
- 密钥 — Keys标签 → Generate Key → Install on Server
- 状态徽标自动更新(绿色 = 在线,红色 = 离线)
配置
首次启动时,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