README.md
July 26, 2026 · View on GitHub
NEO SSH-Win Manager
A modern Windows desktop app for mounting remote SSH filesystems as Windows drive letters with a centralized solution for SSH access
Built on top of sshfs-win and WinFsp.
Manage multiple SSH connections, mount them with one click, switch languages per user, and browse remote paths in Windows Explorer as if they were local drives.
Features
- One-click mounting of remote SSH filesystems as Windows drive letters via SSHFS-Win / WinFsp.
- Built-in SSH terminal access per connection — uses Windows OpenSSH or PuTTY.
- Built-in file browser for SFTP, FTPS and FTP — FTP over TLS in explicit (AUTH TLS, port 21) and implicit (port 990) mode, plain FTP for legacy servers, with upload/download, rename, delete and in-place editing. Plain-FTP hosts can also be handed to the on-board Windows Explorer FTP client.
- Password authentication with stored credentials — passwordless login without using SSH keys.
- Public key authentication.
- SSH certificate authentication.
- Live remote system info panel (OS, CPU, RAM, disk, uptime, load, temperature).
- Multi-user accounts with encrypted credential storage (SQLite + cryptography).
- Per-user language (English, German, Spanish, Russian, Dutch, Arabic — easily extensible; Arabic mirrors the UI right-to-left).
- System tray with quick mount toggles, minimize to tray.
- Auto drive-letter detection (free letters only) and ghost-drive cleanup.
- "Start with Windows" and "Auto-reconnect on connection loss" options.
- Optional CLI companion for scripting / agent integration.
Screenshots
![]() Dark mode |
![]() Light mode |
![]() Add / edit a connection |
![]() Live system info panel |
![]() System tray with quick mount toggles |
![]() Per-user login |
![]() User management |
![]() Settings dialog |
Browser Demo
👉 https://www.neosshwinmanager.org/app
Prerequisites
Install these before running the app:
| Tool | Download |
|---|---|
| WinFsp | https://github.com/winfsp/winfsp/releases |
| SSHFS-Win | https://github.com/winfsp/sshfs-win/releases |
| Python 3.11+ (only when running from source) | https://www.python.org/downloads/ |
Quick Start (development)
git clone https://github.com/gregorkrebs/neosshwinmanager.git
cd neosshwinmanager
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
python main.py
On first launch you will be prompted to create an admin user. All SSH credentials you enter afterwards are encrypted with a key derived from that user's password.
Build as .exe
A PyInstaller spec file (NeoSSHWinManager.spec) and a PowerShell build script (build_dual.ps1) are included. The dual build produces both:
NeoSSHWinManager.exe— the GUI app (windowed subsystem).NeoSSHWinManager-cli.exe— the CLI companion (console subsystem) used for scripted CLI access.
.\build_dual.ps1
Outputs land in dist/.
CLI Companion
The CLI companion (NeoSSHWinManager-cli.exe) does not read the database directly. It asks the already running GUI app for a connection that has CLI access enabled.
Before using it:
- Start
NeoSSHWinManager.exeand log in. - Open the target connection in the add/edit dialog.
- Enable CLI access for that connection.
- Generate or copy the CLI access key shown there.
Open an interactive SSH session in the current terminal:
.\dist\NeoSSHWinManager-cli.exe --connect-cli "<access_key>"
Run a single remote command and return its output to the current terminal:
.\dist\NeoSSHWinManager-cli.exe --connect-cli "<access_key>" --exec "uname -a"
More examples:
.\dist\NeoSSHWinManager-cli.exe --connect-cli "<access_key>" --exec "whoami"
.\dist\NeoSSHWinManager-cli.exe --connect-cli "<access_key>" --exec "hostname"
.\dist\NeoSSHWinManager-cli.exe --connect-cli "<access_key>" --exec "cd /var/www && ls -la"
You can use the same interface from source during development:
python cli_main.py --connect-cli "<access_key>" --exec "hostname"
Notes:
--connect-cliis the preferred flag.-connectsshis also accepted for compatibility.- If you omit
--exec, the CLI opens an interactive shell in the current terminal. - If the GUI app is not running, no user is logged in, the key is invalid, or CLI access is disabled for that connection, the command exits with an error.
How mounting works
sshfs-win exposes remote SSH paths under a UNC format that Windows net use understands:
net use X: \\sshfs.r\user@host!22\var\www /persistent:no
The app builds this command automatically from the connection settings and tracks mount state via drive enumeration.
Project layout
neosshwinmanager/
├── main.py # GUI entry point
├── cli_main.py # CLI entry point (companion exe)
├── requirements.txt
├── NeoSSHWinManager.spec # PyInstaller spec (GUI)
├── NeoSSHWinManager-cli.spec # PyInstaller spec (CLI)
├── build_dual.ps1 # Dual-build helper (GUI + CLI exe)
├── assets/ # App icons and screenshots
├── src/
│ ├── config.py # Data models + JSON config
│ ├── database.py # SQLite schema + migrations
│ ├── auth_manager.py # Users, sessions, encrypted credentials
│ ├── connection_manager.py # Connection CRUD
│ ├── sshfs_controller.py # Mount / unmount via net use
│ ├── drive_utils.py # Drive letter helpers
│ ├── i18n.py # Translation loader
│ ├── translations/
│ │ ├── en.json # English (default)
│ │ ├── de.json # German
│ │ ├── es.json # Spanish
│ │ ├── ru.json # Russian
│ │ ├── nl.json # Dutch
│ │ └── ar.json # Arabic (RTL)
│ └── ui/
│ ├── main_window.py
│ ├── connection_card.py
│ ├── system_info_panel.py
│ ├── system_tray.py
│ ├── theme.py
│ └── dialogs/
│ ├── add_edit_dialog.py
│ ├── settings_dialog.py
│ ├── about_dialog.py
│ ├── login_dialog.py
│ └── system_info_dialog.py
└── tests/
└── test_config.py
Adding a language
Language is stored per user. To add a new language:
- Copy
src/translations/en.jsontosrc/translations/<code>.jsonand translate the values. - Add the code to
_SUPPORTEDinsrc/i18n.pyand to the_LANG_LABELSmaps insrc/ui/dialogs/settings_dialog.pyandsrc/ui/main_window.py. - For a right-to-left language, also add the code to
_RTLinsrc/i18n.py— the app then mirrors its layout automatically. - Restart the app.
Missing keys automatically fall back to English.
Run tests
python -m pytest tests/ -v
Credits & history
The idea for this tool was inspired by the original SSHWinManager, which was written in JavaScript / Electron by a different author.
NEO SSH-Win Manager is a complete, from-scratch rewrite in Python (PyQt6), developed jointly by Den4ik53 and Gregor Krebs. No code from the original project is reused. The goals, scope and architecture have changed substantially:
- Native Python / PyQt6 stack instead of Electron.
- Multi-user support with per-user encrypted SSH credential storage.
- Per-user language preference.
- Per-connection live system info panel.
- Optional CLI access key for agent / automation integration.
- System tray with quick mount toggles.
- Optional PuTTY / OpenSSH terminal launch per connection.
License
MIT — do whatever you want with it. Attribution is appreciated but not required.





