A lightweight, cross-platform SSH client built with Python, Tkinter, and Paramiko. Designed for developers, sysadmins, and everyday SSH use.
- Interactive Terminal — Full shell sessions with real-time output, search (Ctrl+F), and session transcript logging
- SFTP File Browser — Browse, upload, download, rename, delete files, create directories, with transfer progress bars
- Port Forwarding — Local TCP tunnels through your SSH connection
- SSH Key Generator — Generate Ed25519 or RSA key pairs from the GUI
- Command Snippets — Save, edit, and run reusable command templates
- Quick Command — Run one-off commands with output capture and export
- Session Manager — Save, load, and organize connection profiles
- Dual Auth — Password and SSH key authentication (with passphrase support)
- Multi-Session Tabs — Open multiple connections in tabs, close individually
- Settings — Configurable font, theme (dark/light), scrollback, and more
- Session Logging — Terminal transcripts saved to
~/.os_ssh/logs/ - Structured Logging — Rotating file + console logs for debugging
- Cross-Platform — Runs on Windows, macOS, and Linux
Launch the app to see the dark-themed UI with sidebar connection panel, tabbed terminals, SFTP browser, and more.
- Python 3.10 or newer
- pip
# Clone the repository
git clone https://github.com/os-ssh/os-ssh.git
cd os-ssh
# Install dependencies
pip install -r requirements.txt
# Run the application
python main.pypip install -e .
python -m os_ssh- Connect — Enter host, port, username, and password (or select a key file) in the sidebar, then click Connect.
- Terminal — Type commands directly in the terminal tab. Supports Ctrl+C/D/Z/L, arrow keys, Tab completion, Home/End, and full interactive shells.
- Find — Press Ctrl+F in the terminal to search output.
- SFTP — Switch to the SFTP tab to browse files. Double-click folders. Use toolbar buttons for Upload, Download, New Dir, Rename, Delete. Toggle hidden files.
- Quick Command — Tools → Quick Command to run a standalone command. Supports command history (Up/Down) and Export.
- Port Forwarding — Tools → Port Forwarding to create local TCP tunnels.
- Key Generator — Tools → SSH Key Generator to create Ed25519 or RSA key pairs.
- Snippets — View → Snippet Manager to save, edit, and run reusable command templates.
- Settings — File → Settings to configure theme, font, scrollback, and behaviour.
- Save Sessions — Click Save to store connection details. Double-click a saved session to load it.
OS SSH/
├── main.py # Entry point
├── requirements.txt # Python dependencies
├── setup.py # Packaging (pip install -e .)
├── .gitignore
├── LICENSE
├── README.md
└── os_ssh/ # Application package
├── __init__.py # Version & metadata
├── __main__.py # python -m os_ssh support
├── core/ # Backend / non-GUI logic
│ ├── __init__.py
│ ├── ansi.py # ANSI escape-code stripping
│ ├── config.py # Settings, sessions, snippets persistence
│ ├── connection.py # SSH connection wrapper (shell + SFTP + exec)
│ ├── keygen.py # SSH key-pair generation
│ ├── logger.py # Logging system + session transcripts
│ └── tunnel.py # Local port forwarding
└── ui/ # GUI layer (Tkinter)
├── __init__.py
├── app.py # Main application window
├── dialogs.py # Quick Command, Port Forward, KeyGen, Settings
├── sftp.py # SFTP file-browser tab
├── sidebar.py # Connection form + saved sessions
├── snippets.py # Snippet Manager tab
├── terminal.py # Interactive terminal tab
└── theme.py # Dark/Light theme engine
All user data is stored in ~/.os_ssh/:
| File | Purpose |
|---|---|
sessions.json |
Saved connection profiles |
settings.json |
App preferences (theme, font, etc.) |
snippets.json |
Reusable command snippets |
logs/os_ssh.log |
Application log (rotating, 5 MB × 3) |
logs/session_*.log |
Per-connection terminal transcripts |
| Shortcut | Action |
|---|---|
Ctrl+N |
Focus new connection |
Ctrl+W |
Close current tab |
Ctrl+F |
Find in terminal |
Ctrl+C |
Send interrupt (SIGINT) |
Ctrl+D |
Send EOF |
Ctrl+Z |
Send SIGTSTP |
Ctrl+L |
Clear screen |
Tab |
Shell auto-complete |
Home / End |
Beginning / end of line |
Up / Down |
Shell history |
Contributions are welcome! To get started:
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Commit your changes (
git commit -m 'Add my feature') - Push to the branch (
git push origin feature/my-feature) - Open a Pull Request
This project is licensed under the MIT License — see the LICENSE file for details.
Built by QCVTeam with ❤️ for the open-source community.