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.0

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.0
File Size Uploaded Provenance Actions
ign8ssh-0.3.0.tar.gz 12.7 kB Without provenance Details for ign8ssh-0.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for ign8ssh 0.3.0
File Interpreter ABI Platform Actions
ign8ssh-0.3.0-py3-none-any.whl Python 3 none any Details for ign8ssh-0.3.0-py3-none-any.whl

Total release size: 25.7 kB

Release files / ign8ssh-0.3.0.tar.gz

Download URL ign8ssh-0.3.0.tar.gz
Size 12.7 kB
Tags Source
SHA-256 checksum
How to use checksums
c3556d53593a92392d207d4a40b523699fe2460cbaf7ad34eebd6bd313853c6c
BLAKE2b-256 checksum
How to use checksums
61d0492add94f84ebd72fe1ae6ca87528bbaf30e61acbff229f9f7d82dd9e1f2
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.0-py3-none-any.whl

Download URL ign8ssh-0.3.0-py3-none-any.whl
Size 13.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9255b770d1f9756c84173420b7fbef0e62c246bd60fe0e37d5aba41c3235b43f
BLAKE2b-256 checksum
How to use checksums
3618141747e1b89a06d76fa39dbd592af7a4c039a741da80a279cd04d9ba9d71
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.0

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