SSH Session Manager (sshse) application
Project description
sshse
SSH Session Manager (sshse) streamlines opening secure shell sessions, keeps a rich connection history, and lays the groundwork for automation around inventory, scripting, and file transfer.
Table of Contents
Overview
sshse is a Typer-based command-line application for managing SSH workflows. The current focus is on an ergonomic interactive launcher backed by a persistent history store, with an architecture designed to support inventory management, multi-host execution, and pluggable transports as the project matures.
Features
- Quick-connect shorthand: run
sshse hostorsshse user@hostto open a session immediately. - Interactive history browser that supports fuzzy filtering, keyboard navigation, and graceful fallbacks when a full TUI is unavailable.
- Persistent history powered by
HistoryStore, stored in the OS-specific data directory (for example~/.local/share/sshse/history.jsonon Linux,~/Library/Application Support/sshse/history.jsonon macOS). - Encrypted credential vault managed via
ssh credswith AES-256-GCM encryption and Argon2id key stretching. - Clean CLI ergonomics built with Typer, including a built-in
--versionflag and helpful error messaging. - Modular layout prepared for adapters, plugins, and inventory integrations so new capabilities can be added without disrupting the core.
Installation
For Users
Install the latest published build from PyPI:
pip install sshse
For Developers
Set up a local development environment directly from this repository:
git clone https://github.com/segevido/sshse.git
cd sshse
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -e '.[dev]'
Optional but recommended:
pre-commit install
This installs the project in editable mode with linting, formatting, and testing tools available for local development.
Usage
Launch the CLI without arguments to open the interactive browser:
sshse
Connect directly to a host:
sshse user@example.com
Additional options:
sshse --versionprints the application version and exits.sshse --helpdisplays the Typer-generated help screen for all commands and options.
The CLI returns a non-zero exit code on failure so it can be composed in scripts.
Credential Store
Initialize a local encrypted credential store (defaults to deriving from ~/.ssh/id_rsa):
sshse creds init
Add or update credentials for a host:
sshse creds add --username alice --host example.com
List stored credentials without exposing secrets:
sshse creds list --json
Refer to docs/commands/creds.md for detailed workflows, key rotation, and export guidance.
Connection History
Every successful connection is recorded through HistoryStore, which:
- Deduplicates entries by host, user, and port while keeping the most recent connection first.
- Stores timestamps in UTC for reliable ordering across platforms.
- Limits history size (defaults to 128 entries) and truncates automatically.
The history file can be inspected or managed manually if desired. Integrations can import HistoryStore from sshse.core.history to record connections performed outside of the interactive launcher.
Project Structure
sshse/
|-- adapters/ # Future SSH backend implementations
|-- cli/ # Typer CLI entry points, history browser, SSH launcher
|-- config/ # Configuration models and loaders (planned)
|-- core/ # Domain logic such as connection history
|-- plugins/ # Extension points for providers and integrations
Top-level tooling:
pyproject.tomlconfigures dependencies, Ruff, Black, pytest, mypy, and packaging metadata.tests/contains unit tests that exercise the CLI and core modules.
Development
With the virtual environment active, run the following to validate changes:
ruff check .
black .
mypy sshse
pytest --cov=sshse --cov-report=term-missing --cov-fail-under=100
Bandit (bandit -r sshse -q) is also configured for security scanning. Pre-commit hooks will enforce formatting and linting on each commit when enabled.
Contributing
Contributions, bug reports, and feedback are welcome while the project evolves. Please open an issue or discussion describing the proposed change, follow conventional commits for messages, and ensure the test suite passes before submitting a pull request.
License
sshse is available under the MIT License.
Project details
Release history Release notifications | RSS feed
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 sshse-0.2.0.tar.gz.
File metadata
- Download URL: sshse-0.2.0.tar.gz
- Upload date:
- Size: 39.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87bd543bedfdea213a839c454a71c8361a3467a2a1bba22e67fb663bfb3b8b1b
|
|
| MD5 |
0f4d86c6dca40ab2e881b6c98e8cda68
|
|
| BLAKE2b-256 |
acf5a0a141eaa8bd3e92f2c44dd35db9eb2cbfe8f763b662fae0c36fd415cfad
|
Provenance
The following attestation bundles were made for sshse-0.2.0.tar.gz:
Publisher:
python-publish.yml on segevido/sshse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sshse-0.2.0.tar.gz -
Subject digest:
87bd543bedfdea213a839c454a71c8361a3467a2a1bba22e67fb663bfb3b8b1b - Sigstore transparency entry: 543802625
- Sigstore integration time:
-
Permalink:
segevido/sshse@8d057ae10d390bb0601999bf89e30590736e89fb -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/segevido
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@8d057ae10d390bb0601999bf89e30590736e89fb -
Trigger Event:
release
-
Statement type:
File details
Details for the file sshse-0.2.0-py3-none-any.whl.
File metadata
- Download URL: sshse-0.2.0-py3-none-any.whl
- Upload date:
- Size: 25.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3536f99386553663b644de315011e3de2a0f8d5ad263cb516e56ec2acb10c4f5
|
|
| MD5 |
39fbd7e97f2eaa42a3ab46a546f6e6f1
|
|
| BLAKE2b-256 |
682a9722cc701ad79fa0f6991477ec96922ce1c1f3641f52ab2f924de0b0aab2
|
Provenance
The following attestation bundles were made for sshse-0.2.0-py3-none-any.whl:
Publisher:
python-publish.yml on segevido/sshse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sshse-0.2.0-py3-none-any.whl -
Subject digest:
3536f99386553663b644de315011e3de2a0f8d5ad263cb516e56ec2acb10c4f5 - Sigstore transparency entry: 543802635
- Sigstore integration time:
-
Permalink:
segevido/sshse@8d057ae10d390bb0601999bf89e30590736e89fb -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/segevido
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@8d057ae10d390bb0601999bf89e30590736e89fb -
Trigger Event:
release
-
Statement type: