SSH client tools have been around forever, but many still rely on legacy UI toolkits or clunky interfaces that don’t feel native on modern Linux desktops. sshpilot takes a fresh approach by building a GTK4-based SSH connection manager in Python, integrating tightly with GNOME’s libadwaita for a consistent user experience. Under the hood, it combines Paramiko for SSH and SFTP, VTE for terminal emulation, and libsecret for safe credential storage, aiming to replace the likes of PuTTY and Termius with a lightweight, secure, and visually native app.
What sshpilot does and how it’s built
sshpilot is a desktop application that manages SSH connections with a tabbed interface, letting you open multiple terminals, transfer files securely, and set up port forwarding—all in one place. It targets Linux and macOS platforms, built with Python 3 and GTK 4 alongside libadwaita to provide a native GNOME look and feel.
The main components include:
- Paramiko: a pure Python SSH and SFTP library handling the secure connections and file transfers.
- VTE (GTK4): terminal emulator widget used for rendering the SSH terminal sessions inside the app.
- PyXterm.js: an alternative terminal backend on Linux, providing a web-based terminal emulator.
- libsecret: used for securely storing credentials on Linux, avoiding plaintext password storage.
The app loads your existing SSH configurations from the standard .ssh/config file, so you can bring your existing hosts and settings into sshpilot seamlessly. It supports key SSH features like command broadcasting (sending the same command to multiple terminals), local/remote/dynamic port forwarding, SCP-based file transfers, and light/dark themes.
Packaging is comprehensive with availability as APT packages, Fedora COPR builds, Flatpak, Arch AUR, and macOS DMG installers, making installation straightforward across most Linux distributions and macOS.
Technical strengths and tradeoffs in the implementation
The standout technical achievement is the integration of modern GTK4 and libadwaita for a fully native GNOME desktop experience. This is not trivial, as GTK4 is still relatively new and many apps lag behind in adopting it. sshpilot embraces it fully, which means better visual consistency and use of modern UI paradigms compared to older GTK3 or Qt-based SSH clients.
Using Paramiko for SSH and SFTP is a pragmatic choice. It’s pure Python, well-maintained, and flexible. However, Paramiko is synchronous in nature, which can be a bottleneck for scaling or highly concurrent use cases. sshpilot manages this by focusing on the desktop client use case rather than server-side scaling.
Terminal emulation with VTE (GTK4) is another highlight. VTE is battle-tested for GNOME terminal apps, so it reliably handles terminal rendering, input, and escape sequences. The fallback to PyXterm.js on Linux offers a web-based terminal option, which is neat for environments where VTE isn’t available or preferred.
Credential storage via libsecret is a solid security feature. Instead of storing passwords in plain text or config files, sshpilot leverages the system’s keyring, increasing security and user trust. This is Linux-specific though; macOS uses its native credential storage mechanisms, but the README does not detail macOS credential handling, which might be a limitation for cross-platform parity.
On the downside, sshpilot’s reliance on relatively recent versions of GTK4 (4.6+), libadwaita, and VTE (0.70+) means it’s not compatible with older distributions without backports. Also, the focus on Linux and macOS leaves Windows users out, which is notable since many still use PuTTY or Windows Terminal for SSH.
The codebase is Pythonic and modular, making it approachable for contributors familiar with PyGObject and GTK development. The use of standard Linux concepts like .ssh/config and libsecret shows a design philosophy that favors integration over reinvention.
Installation and quick start
Debian/Ubuntu (Manual Install)
Latest release can be downloaded from here: https://github.com/mfat/sshpilot/releases/
Fedora/RHEL/openSUSE (Manual Install)
Latest release can be downloaded from here: https://github.com/mfat/sshpilot/releases/
Minimum Requirements
| Component | Minimum Version |
|---|---|
| GTK 4 | 4.6 |
| libadwaita | 1.4 |
| VTE (GTK4) | 0.70 |
| PyGObject | 3.42 |
| pycairo | 1.20.0 |
| Paramiko | 3.4 |
| cryptography | 42.0 |
| keyring | 24.3 |
| psutil | 5.9.0 |
| GtkSourceView | 5.0 |
💻 Run from Source
You can also run the app from source. Install the modules listed in requirements.txt and a fairly recent version of GNOME and it should run.
python3 run.py
To enable verbose debugging output, run the app with the --verbose flag:
python3 run.py --verbose
verdict
sshpilot is a solid choice if you want a native GNOME SSH client that feels modern and integrates well with your Linux desktop environment. It’s especially relevant if you’re tired of legacy clients that don’t follow GTK4 or libadwaita standards or if you want built-in secure credential storage without third-party dependencies.
The focus on Linux and macOS means Windows users will need to look elsewhere, and the GTK4 version requirements might exclude some older Linux distros. Its synchronous SSH handling via Paramiko means it’s best suited for typical desktop workflows rather than high-throughput or server-side automation.
Overall, sshpilot shows how a Python GTK4 app can replace legacy SSH clients by combining native terminal emulation, secure credential management, and a polished UI. It’s worth checking out if you build or maintain Linux desktop tools and want a clean, open source SSH client with modern UX conventions.
Related Articles
- Colmena: A stateless, Rust-based deployment tool for NixOS with Nix Flakes support — Colmena is a lightweight Rust tool for stateless, parallel NixOS deployments using Nix Flakes. It wraps core Nix command
- Traefik: dynamic reverse proxy and load balancer for microservices — Traefik is a Go-based reverse proxy and load balancer that automatically configures routes by integrating with orchestra
- awesome-copilot: modular community plugins and agentic workflows for GitHub Copilot — awesome-copilot is a community-curated collection of plugins and agents that extend GitHub Copilot with modular, agentic
→ GitHub Repo: mfat/sshpilot ⭐ 889 · Python