Skip to main content

A fast, responsive Textual TUI for managing and launching SSH hosts from your OpenSSH config.

Project description

tussh

A fast, responsive Textual TUI for browsing and launching SSH hosts from your OpenSSH config.

  • Left: searchable host list sorted by usage (most-used first)
  • Right: full, merged effective options for the selected host
  • Enter connects; a/e/d add/edit/delete; o options; Esc quits

Highlights

  • Reads ~/.ssh/config (plus Include globs); applies OpenSSH “first match wins”
  • Lists only explicit aliases (wildcards still affect merged options)
  • Clean handoff on connect: the app exits, then runs SSH/Mosh to avoid UI mixing
  • Add/Edit/Delete host blocks (writes only to primary config)
  • Options modal for global extra ssh args and a custom config path
  • Choose client: SSH or Mosh (extra SSH args passed to mosh via --ssh)
  • Filter quickly with / (type to filter, Esc to leave the filter)
  • Usage-based sorting: hosts bubble up as you use them more

Install

poetry install
poetry run tussh

# or, after publishing
pip install tussh
tnussh

Usage

Key bindings

  • Enter: Connect to highlighted host (also works when pressing Enter in the list)
  • /: Focus the filter input; type to filter; Esc to return to list
  • a: Add a host
  • e: Edit selected host
  • d: Delete selected host (with confirmation)
  • o: Open Options
  • Esc or q: Quit (also closes an open modal)

UI overview

  • Host list (left):

    • Sorted by usage (descending), then alphabetically (case-insensitive)
    • First host is selected on startup; the list has focus by default
    • Filter box sits above the list; it does not steal focus unless / is pressed
  • Options panel (right):

    • Shows the merged, effective options for the selected host
    • Non-focusable to keep keyboard focus in the host list

Modals

  • Options modal:

    • Client: choose SSH or Mosh
    • Extra SSH arguments: appended to every connection (e.g., -o ConnectTimeout=5)
    • SSH config path: override the default ~/.ssh/config
    • Esc cancels; Save persists to settings.json
  • Add/Edit host modal:

    • Two-column form: label on the left, input on the right; scrollable content
    • Common fields: Alias, HostName, User, Port, IdentityFile, ProxyJump, ProxyCommand, forwards, keepalives, known hosts file, auth preferences, etc.
    • Booleans: Use OpenSSH-friendly values (yes/no). Examples are shown as placeholders.
    • “Additional options”: free-form lines that will be written verbatim inside the host block
    • Esc cancels; Save writes to your primary config when possible

Behavior and storage

  • Primary SSH config: defaults to ~/.ssh/config (override in Options)
  • Includes: all Include files are read for merging; writes happen only to the primary config
  • Safety: if a host lives in an included file or shares a multi-alias block, tussh prevents editing and explains what to do
  • Usage-based sorting: each successful connect increments a counter per alias

Where settings are stored

  • Linux: ~/.config/tussh/settings.json
  • macOS: ~/Library/Application Support/tussh/settings.json
  • Windows: %APPDATA%\tussh\settings.json

Settings include extra_args, ssh_config_path, client, and usage counts.

Connecting

  • SSH: runs ssh <alias> [extra args]
  • Mosh: runs mosh [--ssh="ssh <extra args>"] <alias>
  • The app exits first, then your shell process execs the command for a clean TTY session.

Troubleshooting

  • Enter doesn’t connect:
    • Ensure the host list has focus (press Esc to leave the filter)
    • If it still doesn’t work, check your Textual version and report the issue
  • ssh/mosh not found:
    • Install the client and ensure it’s on PATH
  • Can’t edit/delete a host:
    • The host may live in an included file or a multi-alias block; the app will tell you what to change

Notes

  • Writes are confined to the primary SSH config; includes are read-only
  • Boolean options are not auto-converted; enter values exactly as you want them written (e.g., yes/no)
  • The UI uses a separate stylesheet for layout and modal centering

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tussh-0.1.0.tar.gz (16.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tussh-0.1.0-py3-none-any.whl (17.1 kB view details)

Uploaded Python 3

File details

Details for the file tussh-0.1.0.tar.gz.

File metadata

  • Download URL: tussh-0.1.0.tar.gz
  • Upload date:
  • Size: 16.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.3 Linux/5.15.167.4-microsoft-standard-WSL2

File hashes

Hashes for tussh-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0ca0bf404313e0e6a666b7e25848d28559dc983f777da3d83a7c4f90df286112
MD5 fcc4d066592a24e714807d100fe04ff8
BLAKE2b-256 3d69388405646e15204d013a951168deb100c97f1a7ca6333144e9596b449762

See more details on using hashes here.

File details

Details for the file tussh-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: tussh-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.3 Linux/5.15.167.4-microsoft-standard-WSL2

File hashes

Hashes for tussh-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b1f1ce7ef0beeef5948465b17cf70f95fa767c6c30ac04fa9750af1c0c883247
MD5 d5fde5bb0a539e07ca4bf69aca2bb264
BLAKE2b-256 3e9df9502cb9ca5068862082dc8c14aa150f7dd53d622b0f48baee6c2e487364

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page