SSH Pilot is a user-friendly, modern and lightweight SSH connection manager for Linux and macOS, with an integrated terminal and SFTP file manager. It's an alternative to Termius, Putty, Mobaxterm and similar apps.
|
- About
- Features
- Download
- Minimum Requirements
- Run from Source
- Documentation
- Telegram Channel
- Third-Party Libraries
- Special Thanks
- Support Development
It's an SSH connection manager with an integrated terminal and built-in dual-pane SFTP client.
It makes managing multiple machines easier and more fun. You see all your hosts in one unified interface and can organize them into groups, with color tags.
SSH Pilot is a GUI on top of your .ssh/config It honors your existing SSH configuration. Just fire up the app and you'll be have access to all your machines instantly.
It can do so many things.
SSH Pilot can generate and copy keys to your servers. It stores your secrets (passwords and private key passphrases) securely in the operating system's keychain. It can securely use saved secrets to log you in.
- Tabbed interface
- Intuitive, minimal UI with keyboard navigation and shortcuts
- Built-in SFTP dual-pane file manager
- Organize servers in groups
- Option to use the built-in terminal or your favorite one
- Broadcast commands to all open tabs
- Full support for Local, Remote and Dynamic port forwarding
- SCP support for quickly uploading or downloading files to/from remote servers
- Keypair generation and copying to remote servers (ssh-copy-id)
- Support for running remote and local commands upon login
- Secure storage for credentials
- Privacy toggle to show/hide ip addresses/hostnames in the main window
- Light/Dark interface themes
- Customizable terminal font and color schemes
- Load/save standard .ssh/config entries (Or use dedicated configuration file)
- Free software (GPL v3 license)
- Add the GPG key:
curl -fsSL https://mfat.github.io/sshpilot-ppa/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/sshpilot-ppa.gpg- Add the repository:
echo "deb [signed-by=/usr/share/keyrings/sshpilot-ppa.gpg arch=amd64] https://mfat.github.io/sshpilot-ppa any main" | sudo tee /etc/apt/sources.list.d/sshpilot-ppa.list- Update and install:
sudo apt update
sudo apt install sshpilotFor more information, visit: https://mfat.github.io/sshpilot-ppa/
Latest release can be downloaded from here: https://github.com/mfat/sshpilot/releases/
This repository provides automatic updates for SSH Pilot on RPM-based distributions.
dnf copr enable mahdif62/sshpilot
dnf install sshpilotLatest release can be downloaded from here: https://github.com/mfat/sshpilot/releases/
Available on Flathub
OR in a terminal type:
flatpak install flathub io.github.mfat.sshpilotArch Linux package via AUR: https://aur.archlinux.org/packages/sshpilot
# replace yay with your AUR helper of choice, e.g. paru
yay -S sshpilotOR
Nightly Arch Linux package via AUR (community maintained): https://aur.archlinux.org/packages/sshpilot-git
# replace yay with your AUR helper of choice, e.g. paru
yay -S sshpilot-gitbrew tap mfat/sshpilot
brew install sshpilotMore info here: https://github.com/mfat/homebrew-sshpilot
Works on macOS Homebrew and Linuxbrew. The formula is build-from-source; first install pulls the GTK4 stack and compiles a Python virtualenv with the runtime deps. After install, launch sshPilot from a terminal inside an active desktop session (Wayland/X11 + dbus on Linux; native on macOS).
Download the dmg file from the releases section https://github.com/mfat/sshpilot/releases/
brew install gtk4 libadwaita pygobject3 py3cairo vte3 gobject-introspection adwaita-icon-theme pkg-config glib graphene icu4c sshpass gtksourceview5Note: webkitgtk is Linux-only and not available on macOS via Homebrew. The PyXterm.js backend will not be available on macOS; the application will use the VTE backend instead.
| 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 |
sshPilot is run from source in a Python virtual environment (venv) + pip, on top of the GTK stack. Two setups are supported (both mirror PyGObject's official Getting Started guide):
- Hybrid (recommended): install the GTK stack and PyGObject from your
distribution, then use a
--system-site-packagesvenv for the pure-Python deps. No compiler needed — the quick-start below uses this. - Pure venv: build PyGObject/pycairo from PyPI into a plain venv (needs a C
toolchain + GTK
-devheaders).
📖 Full guide to both approaches, dev/test setup, and troubleshooting: documentation/running-from-source.md.
One command — detects your distro (Debian/Ubuntu, Fedora/RHEL, Arch, openSUSE),
installs the system GTK stack via sudo, sets up the venv, and launches:
git clone https://github.com/mfat/sshpilot.git && cd sshpilot && ./scripts/install-run-linux.sh(Flags: --no-run, --with-webkit, -y. On an unsupported distro, follow the
manual steps below.) Prefer to set things up yourself? Continue with Step 1.
Why a venv? Modern Linux distributions ship an externally-managed system Python (PEP 668) that refuses
pip install. A venv keeps sshPilot's Python dependencies isolated.
Why system packages for the GTK stack (hybrid)? PyGObject, pycairo, and the GTK4/libadwaita/VTE runtime are provided by your distribution. Do not install PyGObject or pycairo via pip in this setup — pip would build them from source, requiring a C toolchain and
-devheaders. Install them as system packages (Step 1) and create the venv with--system-site-packagesso it can see them (Step 2).
These provide PyGObject, the GObject-Introspection (GI) typelibs, and the native GTK4/libadwaita/VTE runtime. Install them before creating the venv.
Debian/Ubuntu
sudo apt update
sudo apt install \
python3 python3-venv python3-gi python3-gi-cairo \
libgtk-4-1 gir1.2-gtk-4.0 \
libadwaita-1-0 gir1.2-adw-1 \
libvte-2.91-gtk4-0 gir1.2-vte-3.91 \
libgtksourceview-5-0 gir1.2-gtksource-5 \
libsecret-1-0 gir1.2-secret-1 \
python3-cryptography sshpass ssh-askpass \
gir1.2-webkit-6.0Fedora / RHEL / CentOS
sudo dnf install \
python3 python3-gobject \
gtk4 libadwaita \
vte291-gtk4 \
gtksourceview5 \
libsecret \
python3-cryptography sshpass openssh-askpass \
webkitgtk6Arch Linux
sudo pacman -S --needed \
python python-gobject python-cairo \
gtk4 libadwaita vte4 gtksourceview5 libsecret \
python-cryptography sshpassopenSUSE (Tumbleweed)
sudo zypper install \
python3 python3-gobject \
typelib-1_0-Gtk-4_0 \
gtk4 libadwaita \
typelib-1_0-Adw-1 \
typelib-1_0-Vte-3_91 \
typelib-1_0-GtkSource-5 \
typelib-1_0-Secret-1 \
python3-cryptography \
sshpass openssh-askpass-gnomeOther distributions work too — install the equivalent GTK4 / libadwaita / VTE
(GTK4) / GtkSourceView 5 / libsecret packages plus PyGObject. The optional
WebKit 6.0 package (gir1.2-webkit-6.0 / webkitgtk6 / webkitgtk-6.0 /
typelib-1_0-WebKit-6_0) is only needed for the PyXterm.js terminal backend; the
default VTE backend works without it. Full per-distro detail (and the pure-venv
approach) is in
documentation/running-from-source.md.
libsecret handles secure credential storage on Linux via the Secret Service
API. macOS contributors should follow
documentation/INSTALL-macos.md for the
Homebrew GTK stack instead.
Create the venv with --system-site-packages so it can use the
distribution's PyGObject/pycairo and GI bindings from Step 1:
git clone https://github.com/mfat/sshpilot.git
cd sshpilot
python3 -m venv --system-site-packages .venv
source .venv/bin/activate(Run deactivate to leave the environment later.)
pip install --upgrade pip
pip install -r requirements.txtThis installs only the pure-Python dependencies (Paramiko, cryptography, keyring, psutil, …). PyGObject and pycairo are intentionally not installed here — they come from the system packages in Step 1.
python3 run.pyEnable verbose debugging output with the --verbose flag:
python3 run.py --verbosesshPilot writes rotating logs under the state directory
(~/.local/state/sshpilot/, or the Flatpak equivalent under
~/.var/app/io.github.mfat.sshpilot/.local/state/sshpilot/):
| File | Contents |
|---|---|
sshpilot.log |
All messages (rotating, 10 MB × 5) |
app.log |
Application messages |
ssh.log |
SSH / connection / terminal messages |
crash.log |
Fatal-signal tracebacks, captured automatically. The previous run's crash is kept as crash.log.previous and offered on next launch and via Help ▸ Report a Problem. |
GTK warnings and uncaught exceptions are routed through the logging system, so they show up in Help ▸ View Logs (filter by Warning/Error, or pick the Crash category to read the last crash report). From there you can Copy a bug-report bundle (logs + crash report) or Export Diagnostics….
Help ▸ Export Diagnostics… saves a single ZIP (logs + system info + a redacted
config.json) that you can attach to a bug report — secrets are stripped and your saved
connections / SSH config are not included.
By default the logs already capture GTK/GLib warnings & criticals (the
Gtk-CRITICAL / Gtk-WARNING lines that name the exact bad widget/render operation) and
uncaught Python exceptions (main thread, worker threads, and GLib callbacks) — no flag
needed. Extra flags for deeper diagnostics:
python3 run.py --diagnostics # shorthand for --verbose --log-gtk-warnings
python3 run.py --log-gtk-warnings # also capture lower-severity GTK/GLib info & debug
python3 run.py --fatal-warnings # abort at the first GTK/GLib warning with a backtrace--log-gtk-warningsadditionally records lower-severity GTK/GLib info & debug messages (deep GTK/widget tracing). Warnings & criticals are captured without it.--fatal-warningsturns the first GTK/GLib warning/critical into a fatal abort with a full backtrace (written tocrash.logand the terminal), pinpointing the offending operation. It is aggressive and will also abort on benign warnings, so use it in a focused repro session.--diagnosticsis the recommended one-stop flag when reporting a bug.
Run python3 run.py --help for the full list.
Prefer to keep PyGObject out of system packages? The pure-venv approach (pip-built PyGObject/pycairo in a plain venv) is documented in the full source-install guide.
Alternative (not for development): if you only want to use sshPilot, the distribution packages, Flatpak, Homebrew, and AUR builds in Download are the easiest route. The venv workflow above is the recommended path for running the latest source and for contributing.
- User guide and FAQ: https://github.com/mfat/sshpilot/wiki
- In-repo developer and platform docs: documentation/
- Writing plugins (protocols & UI pages): docs/plugins/
SSH Pilot uses the following third-party libraries:
- pyxtermjs - A fully functional terminal in your browser, used as an alternative terminal backend (MIT License)
- Elibugy as the primary sponsor of the project
- Behnam Tavakkoli, Chalist and Kalpase, Ramin Najjarbashi, Farid and Narbeh for testing
- Icon designed by Blisterexe
Ko-fi: https://ko-fi.com/newmfat
Bitcoin:
bc1qqtsyf0ft85zshsnw25jgsxnqy45rfa867zqk4t
Doge:
DRzNb8DycFD65H6oHNLuzyTzY1S5avPHHx
USDT (TRC20)
TAvQWVD83DB3QuDspnMh4uiJ7hi4Jzcr6X

