Skip to main content

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) and 0600 permissions
  • 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 ssh in 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

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)

Source distribution for graphical-ssh 0.1.2
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)

Table of built distributions (wheels) for graphical-ssh 0.1.2
File Interpreter ABI Platform Actions
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page