ign8ssh
Manage and connect to SSH hosts declared in ~/.ign8/ign8ssh.json.
Install
pip install ign8ssh
Configure
Create ~/.ign8/ign8ssh.json:
[
{
"name": "prod-web",
"host": "web.example.com",
"user": "deploy",
"port": 22,
"identity_file": "~/.ssh/id_ed25519"
},
{
"name": "bastion",
"host": "bastion.example.com",
"user": "jaho"
}
]
The file may also be an object with a hosts key wrapping the list. port
defaults to 22 and identity_file is optional.
Commands
Two data stores are used side by side:
~/.ign8/ign8ssh.json— curated fleet used bylist/check/connect.~/.ssh/config— wheremapwrites discovered hosts and whatign8ssh-tuireads.
ign8ssh (JSON-backed fleet)
| Command | Description |
|---|---|
ign8ssh list |
List configured hosts (from ~/.ign8/ign8ssh.json) |
ign8ssh check |
Probe every host with a non-interactive SSH ping (BatchMode) |
ign8ssh connect <name> |
Open an interactive SSH session |
The default (no subcommand) prints a short status summary.
ign8ssh map (LAN discovery → ~/.ssh/config)
Scan the local network for SSH servers and register them as Host entries
in ~/.ssh/config. The entries live inside a sentinel block that gets
replaced on every run, so re-scanning is idempotent — vanished hosts drop
off automatically and you can hand-edit stanzas outside the block without
losing them.
# Scan the /24 attached to the primary interface
ign8ssh map --local
# Scan an explicit range, tag every entry with a specific key and user
ign8ssh map --network 10.0.0.0/24 --user root --identity-file ~/.ssh/id_lab
# See what would be written without touching ~/.ssh/config
ign8ssh map --local --dry-run
ign8ssh-tui
Standalone entry point: arrow-key menu over every Host block in
~/.ssh/config (skipping wildcards and Match blocks). Select a host, then
choose an action:
- Connect — execs
ssh <name>in the current terminal. - Rename — prompt for a new alias and edit
~/.ssh/configin place. If the host was inside the ign8ssh-managed block, its stanza is moved out automatically so a futureign8ssh maprun can't clobber the new name.ign8ssh mapalso skips any IP already declared as aHostNameoutside the managed block, so renamed hosts never come back aslan-<ip>duplicates on rescan.
ign8ssh-tui
Release
Publishing to PyPI is handled by the GitLab CI publish job, which runs on any
tag matching v* and mints a token via PyPI's Trusted Publisher OIDC flow.
# bump version in pyproject.toml, commit, then:
git tag v0.1.0
git push origin v0.1.0
Before the first release, register the GitLab project as a Trusted Publisher
for ign8ssh on https://pypi.org/manage/account/publishing/:
- PyPI project name:
ign8ssh - Namespace:
ign8-it-group/team-nine - Repository name:
ign8ssh - Workflow file / job:
publish - Environment: (leave blank)
Metadata
Release files for ign8ssh 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ign8ssh-0.3.1.tar.gz | 12.8 kB | Without provenance | Details for ign8ssh-0.3.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ign8ssh-0.3.1-py3-none-any.whl | Python 3 | none | any | Details for ign8ssh-0.3.1-py3-none-any.whl |
Total release size: 25.9 kB
Release files / ign8ssh-0.3.1.tar.gz
| Download URL | ign8ssh-0.3.1.tar.gz |
|---|---|
| Size | 12.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e0e7e3f4142bc981e2a18463a6835a472ce08d6b4411531a42b358cda0dfe49f
|
|
BLAKE2b-256 checksum How to use checksums |
75ff9d6e31e7e4e0fdae493e1fbe931ea2b45e585d21643bd264bd29df1295c8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / ign8ssh-0.3.1-py3-none-any.whl
| Download URL | ign8ssh-0.3.1-py3-none-any.whl |
|---|---|
| Size | 13.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
42b55bfd94df4f2cd6e5673f94566c52961755d2acad8b2dbf450b11054ca743
|
|
BLAKE2b-256 checksum How to use checksums |
b7d7ef57b28e6c89b20aea157569c6296641218b26b3f0d396bf611fcd776da0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Security for ign8ssh 0.3.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.