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

From PyPI (recommended)

pip install gssh
gssh

Or run without installing:

uvx gssh          # via uv
pipx run gssh     # 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.1

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.1
File Size Uploaded Provenance Actions
graphical_ssh-0.1.1.tar.gz 22.7 kB Without provenance Details for graphical_ssh-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for graphical-ssh 0.1.1
File Interpreter ABI Platform Actions
graphical_ssh-0.1.1-py3-none-any.whl Python 3 none any Details for graphical_ssh-0.1.1-py3-none-any.whl

Total release size: 49.9 kB

Release files / graphical_ssh-0.1.1.tar.gz

Download URL graphical_ssh-0.1.1.tar.gz
Size 22.7 kB
Tags Source
SHA-256 checksum
How to use checksums
67e6535f9210f2ab2240d37d9607472baa66a6f26cf93dea594d85d83bb593f8
BLAKE2b-256 checksum
How to use checksums
fd17a923bd0d7baa4b477c54218bea0bfe84b0ce66bb233e344096d00beb81fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / graphical_ssh-0.1.1-py3-none-any.whl

Download URL graphical_ssh-0.1.1-py3-none-any.whl
Size 27.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8f73cb8b61aa9559576e4fba3a2c8c8d1f1731afae301ed55b5573b0882be405
BLAKE2b-256 checksum
How to use checksums
dd1063cb8cf843c071eea8b19cdbe06349611cfd36eb903209ad626fa1293c56
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for graphical-ssh 0.1.1

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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.1 This release

2 release files No 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