Skip to main content

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 by list / check / connect.
  • ~/.ssh/config — where map writes discovered hosts and what ign8ssh-tui reads.

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/config in place. If the host was inside the ign8ssh-managed block, its stanza is moved out automatically so a future ign8ssh map run can't clobber the new name. ign8ssh map also skips any IP already declared as a HostName outside the managed block, so renamed hosts never come back as lan-<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)

Source distribution for ign8ssh 0.3.1
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)

Table of built distributions (wheels) for ign8ssh 0.3.1
File Interpreter ABI Platform Actions
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.

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