Written by Christopher Malo
A Python SSH/RDP/VNC/Telnet client GUI with integrated KeePass credential management — combining the productivity of MobaXterm-style session management with a secure, full-featured KeePass vault.
- Multi-protocol support — SSH, RDP, VNC, and Telnet sessions in a single app
- Multi-tab terminal — open multiple sessions simultaneously in a tabbed interface
- SSH tunneling — configure local port-forwarding tunnels per session
- X11 forwarding — run remote GUI apps over SSH (requires local X server)
- Session search — real-time filter in the sessions panel by name, folder, or hostname
- MobaXterm import — import existing
.mxtsessionsfiles directly
- Built-in SFTP browser — browse, upload, download, create folders, and delete files without leaving the app
- Opens as a dedicated tab alongside the terminal for the active SSH session
- Open
.kdbxdatabases — KDBX3 (AES-256) and KDBX4 (ChaCha20 + Argon2) supported - Create new databases — choose between Argon2/ChaCha20 (KDBX4) or AES-256/PBKDF2 (KDBX3)
- Full read/write — add, edit, and delete entries without leaving the app
- Auto-fill on connect — linked KeePass entries supply credentials automatically
- SSH auto-fill — paste username or password into the active terminal from the KeePass panel
- Global Auto-Type — simulate keystrokes in any focused window (configurable delay)
- Record & playback — capture a sequence of commands and replay them with one click
- Named macros — save macros by name and manage them via the Macros menu
- Multi-session execution — replay a macro across multiple open sessions
- Five built-in themes — Catppuccin Mocha (default), Catppuccin Latte, Dracula, Nord, One Dark
- Runtime theme switching — changes apply immediately without restart
- Custom application icon — set any
.pngor.icofile as the window icon - Full ANSI color support — 16-color, 256-color, and 24-bit RGB terminal output
- Python plugin API — drop
.pyfiles into~/.sessionvault/plugins/to extend the app - Hook points —
on_session_connect,on_session_output,add_menu_action - Runtime reload — reload plugins from the Settings dialog without restarting
- PyInstaller spec included — build a self-contained executable for Linux, macOS, or Windows
- Python 3.11+
- See
requirements.txtfor Python package dependencies
| Platform | Additional requirement |
|---|---|
| Linux (Arch / Manjaro) | sudo pacman -S python-xlib |
| Linux (Debian / Ubuntu) | sudo apt install python3-xlib |
| Linux (Fedora / RPM-based) | sudo dnf install python3-xlib |
| macOS | No additional package required |
| Windows | No additional package required |
Details
The python3-xlib library enables global Auto-Type (keystroke simulation) on X11-based Linux desktops.
→ python-xlib on PyPI
| macOS (Auto-Type) | Grant Accessibility permission in System Settings → Privacy |
| RDP (Linux/macOS) | xfreerdp must be installed |
| RDP (Windows) | mstsc is built in |
| VNC | vncviewer must be installed |
| X11 forwarding | A local X server (e.g. XQuartz on macOS, VcXsrv on Windows) |
# Clone the repository
git clone <repo-url>
cd sessionvault
# Install dependencies
pip install -r requirements.txt
# Linux: also install python3-xlib for Auto-Type
# sudo apt install python3-xlib
# Run the application
python sessionvault.pypip install pyinstaller
pyinstaller sessionvault.spec
# Output: dist/SessionVault/- Click + New Session (or
Ctrl+T) to add a server - Choose a protocol (SSH / RDP / VNC / Telnet), fill in hostname, port, and credentials
- Double-click a session in the left panel to connect
In the New/Edit Session dialog → SSH Options tab:
- Click + Add Tunnel, enter a local port, remote host, and remote port
- Tunnels are established automatically when the SSH session connects
While an SSH session is active, click the SFTP button in the terminal toolbar. A new tab opens with a full file browser for the remote host.
- Click Record in the terminal toolbar to start capturing commands
- Click Stop to save the macro with a name
- Macros → <name> to replay; Macros → Manage… to rename or delete
- Tools → Open KeePass Database… — unlock your
.kdbxfile - Browse entries in the KeePass panel (bottom-left)
- Right-click an entry → Copy Username / Password / URL, or SSH Auto-fill
- When creating/editing a session, click Select Entry to link credentials
- Tools → New KeePass Database… — create a new KDBX4 vault
- Tools → Add KeePass Entry… — add an entry to the open database
- Open Settings → Preferences → Auto-Type tab, configure the keystroke delay
- In the KeePass panel, right-click an entry → Global Auto-Type The username + password will be typed into whatever window currently has focus
Drop a .py file into ~/.sessionvault/plugins/. Example plugin:
def setup(api):
api.on_session_connect(lambda session: print(f"Connected: {session.name}"))
api.add_menu_action("Say Hello", lambda: print("Hello from plugin!"))Reload via Settings → Preferences → Plugins → Reload plugins.
| Shortcut | Action |
|---|---|
Ctrl+T |
New session |
Ctrl+W |
Close current tab |
Ctrl+, |
Open Preferences |
Ctrl+Q |
Quit |
Double-click |
Connect to session |
Right-click |
Session / KeePass context menu |
- Passwords are never saved to disk. Session configs store only hostname, port, username, key path, and KeePass entry UUID.
- KeePass passwords stay in memory only while the database is unlocked.
- Use Tools → Lock KeePass Database to clear credentials from memory.
- SSH host keys are auto-accepted on first connect. For production use, configure
~/.ssh/known_hostsmanually. - New KeePass databases are created with ChaCha20 + Argon2 (KDBX4) by default for maximum security.
All data is stored under ~/.sessionvault/:
| File / Folder | Contents |
|---|---|
sessions.json |
Session configurations |
settings.json |
Application preferences |
macros.json |
Saved macros |
plugins/ |
User plugin directory |
logs/app.log |
Rotating application log (5 MiB, 3 backups) |
sessionvault/
├── sessionvault.py # Entry point
├── sessionvault.spec # PyInstaller build spec
├── requirements.txt
└── app/
├── constants.py # Themes, paths, app metadata
├── models.py # SSHSessionConfig, TunnelConfig dataclasses
├── theme.py # QSS stylesheet + apply_theme()
├── main.py # SessionVaultApp main window
├── managers/
│ ├── keepass.py # KeePass r/w (open, create, CRUD, save)
│ ├── session.py # Session CRUD + JSON persistence
│ └── settings.py # Application settings persistence
├── terminal/
│ ├── ansi.py # ANSI escape code parser
│ └── widget.py # SSHTerminalWidget, SSHWorker, TelnetWorker
├── sftp/
│ └── browser.py # SFTPBrowserWidget (threaded paramiko SFTP)
├── macros/
│ ├── manager.py # MacroManager (record/save/load)
│ └── dialog.py # MacroManagerDialog, MacroSaveDialog
├── plugins/
│ └── loader.py # PluginAPI + PluginLoader
├── dialogs/
│ ├── new_session.py # New/Edit session dialog (all protocols)
│ ├── keepass_open.py # KeePass open dialog
│ ├── keepass_selector.py # KeePass entry picker
│ ├── keepass_editor.py # KeePass entry + new-DB dialogs
│ └── settings.py # Preferences dialog
└── importers/
└── mobaxterm.py # MobaXterm .mxtsessions importer
Written by Christopher Malo