gssh
A graphical SSH client connection and configuration manager for Debian/Linux. Manage your ~/.ssh/config hosts through a GUI, edit connection parameters, and open SSH sessions — either in an embedded terminal or by launching your preferred external terminal emulator.
Features
- Visual host management — view, add, edit, and delete Host entries from
~/.ssh/config - Dedicated fields for the common options: HostName, User, Port, IdentityFile, ProxyJump, ForwardAgent
- Extra options — any arbitrary ssh_config directive via a freeform text area
- Safe writes — atomic file replacement with automatic timestamped backups (
.config.bak.YYYYMMDD_HHMMSS) and0600permissions - Config linter — catches unknown/deprecated options, insecure key permissions, invalid ports, undefined ProxyJump references, and pattern-overlap conflicts (first-match-wins)
- Connection test — TCP ping-before-connect with latency display
- Wildcard hosts — supports patterns like
*.lab.local - Search/filter — live filter by alias, hostname, or user
- In-app terminal — embedded PTY-based terminal using pyte for VT220 emulation with 5000-line scrollback and 16-colour ANSI
- External terminal — toggle to launch
sshin konsole, gnome-terminal, xterm, or any detected emulator - Round-trip safe — preserves comments, preamble, and unknown directives
Requirements
- Python 3.12+
- PyQt6
- pyte
- (Optional) a terminal emulator for external mode: konsole, gnome-terminal, xterm, etc.
Install
From PyPI (recommended)
pip install graphical-ssh
gssh # or: graphical-ssh (both commands are installed)
Or run without installing:
uvx graphical-ssh # via uv
pipx run graphical-ssh # via pipx
From source
git clone https://github.com/ggrace519/graphical-ssh.git
cd graphical-ssh
uv sync
uv run gssh
Desktop integration
To add gssh to your application menu:
# If installed via pip, the data files are inside the package:
python -c "import gssh.data; print(gssh.data.__path__)"
sudo cp $(python -c "import gssh.data; print(gssh.data.__path__[0])")/gssh.desktop /usr/share/applications/
sudo cp $(python -c "import gssh.data; print(gssh.data.__path__[0])")/gssh.svg /usr/share/icons/hicolor/scalable/apps/
sudo update-desktop-database
Usage
# Use default ~/.ssh/config
uv run gssh
# Specify a custom config file
uv run gssh -c /path/to/ssh/config
GUI controls
| Action | How |
|---|---|
| Add a host | Add Host button → fill in the dialog |
| Edit a host | Select row → Edit button (or double-click to connect) |
| Delete a host | Select row → Delete button → confirm |
| Connect | Select row → Connect (or double-click the row) |
| Toggle terminal mode | In-App Terminal / External Terminal toggle |
| Filter hosts | Type in the search bar |
| Save changes | Save button (writes to config file with backup) |
| Reload from disk | Reload button |
Development
# Run tests with coverage
uv run pytest
# Run the app
uv run gssh
# Run with a test config
uv run gssh -c /tmp/test-config
Project structure
src/gssh/
├── __init__.py # package metadata
├── __main__.py # CLI entry point (argparse + QApplication)
├── config.py # SSH config parser/writer (round-trip safe, atomic writes)
├── models.py # Qt table model for host entries
├── host_editor.py # Add/Edit host dialog
├── connect.py # SSH command builder + launch (in-app or external)
├── terminal.py # In-app terminal widget (pyte + PTY)
└── main_window.py # Main window: host list, toolbar, terminal container
tests/
└── test_config.py # Parser/writer tests (20 tests, 90% config coverage)
Roadmap
- Tier 2: key file management (generate, view, copy public key), known-hosts viewer, connection test, import/export
- Tier 3: port-forwarding manager, per-host tags/notes, system tray quick-connect
License
MIT
Metadata
Release files for graphical-ssh 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| graphical_ssh-0.1.2.tar.gz | 23.1 kB | With provenance | Details for graphical_ssh-0.1.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| graphical_ssh-0.1.2-py3-none-any.whl | Python 3 | none | any | Details for graphical_ssh-0.1.2-py3-none-any.whl |
Total release size: 50.6 kB
Release files / graphical_ssh-0.1.2.tar.gz
| Download URL | graphical_ssh-0.1.2.tar.gz |
|---|---|
| Size | 23.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
37aab22ae414a11693711ec8f7a70b06882dc24f832f9c602ec6d4cf6362ca9f
|
|
BLAKE2b-256 checksum How to use checksums |
b1538dbba173d44f2252899691bfc898c004a628bb4c0213171648b70dad7336
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / graphical_ssh-0.1.2-py3-none-any.whl
| Download URL | graphical_ssh-0.1.2-py3-none-any.whl |
|---|---|
| Size | 27.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
91f65350b2475a6155c7bbed60e1130dafb4537dc47213b9b5a14f53215bba5a
|
|
BLAKE2b-256 checksum How to use checksums |
3fbf08e03c1a21ccba5999fac05aeb4ad90f50c1fad7bcd340b1b9eaf8323170
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logSecurity for graphical-ssh 0.1.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for graphical_ssh-0.1.2.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.