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/dadd/edit/delete;ooptions;Escquits
Highlights
- Reads
~/.ssh/config(plusIncludeglobs); 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,Escto 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;Escto return to lista: Add a hoste: Edit selected hostd: Delete selected host (with confirmation)o: Open OptionsEscorq: 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 Esccancels;Savepersists tosettings.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
Esccancels;Savewrites to your primary config when possible
Behavior and storage
- Primary SSH config: defaults to
~/.ssh/config(override in Options) - Includes: all
Includefiles 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
Escto leave the filter) - If it still doesn’t work, check your Textual version and report the issue
- Ensure the host list has focus (press
ssh/moshnot found:- Install the client and ensure it’s on
PATH
- Install the client and ensure it’s on
- 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ca0bf404313e0e6a666b7e25848d28559dc983f777da3d83a7c4f90df286112
|
|
| MD5 |
fcc4d066592a24e714807d100fe04ff8
|
|
| BLAKE2b-256 |
3d69388405646e15204d013a951168deb100c97f1a7ca6333144e9596b449762
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1f1ce7ef0beeef5948465b17cf70f95fa767c6c30ac04fa9750af1c0c883247
|
|
| MD5 |
d5fde5bb0a539e07ca4bf69aca2bb264
|
|
| BLAKE2b-256 |
3e9df9502cb9ca5068862082dc8c14aa150f7dd53d622b0f48baee6c2e487364
|