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