{"adoption": {"forks": 141, "observed_at": "2026-08-28T04:05:57.365979+00:00", "stars": 1940}, "canonical_url": "https://ross.abutalabs.com/products/sshportal", "card": {"archived": false, "artifact_type": "service", "description": ":tophat: simple, fun and transparent SSH (and telnet) bastion server", "domain": ["security", "infrastructure-as-code", "self-hosted", "networking"], "enriched": true, "function": ["ssh", "security", "auth", "cli", "self-hosted"], "health_score": 80, "homepage": "https://manfred.life/sshportal", "language": "Go", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["moul/sshportal"], "name": "moul/sshportal", "platform": ["windows", "go", "cli", "self-hosted"], "pushed_at": "2026-08-25T17:39:14+00:00", "repo": "moul/sshportal", "stars": 1940, "tags": ["ssh-bastion", "jump-host", "transparent-proxy", "ssh-server", "access-management", "devops", "linux", "macos", "docker"], "topics": ["ssh", "ssh-server", "bastion", "devops", "security", "fun"], "urls": [], "use_cases": ["set up a transparent ssh bastion for my team", "manage ssh access to servers without distributing keys", "centralize ssh host credentials and user access levels", "invite teammates to access servers via ssh", "connect to legacy servers that don't support ssh keys", "audit and control who can ssh into which hosts"], "what_it_is": "sshportal is a transparent SSH bastion (jump host) server written in Go that manages users, hosts, and access control without requiring a traditional jump step. It provides an interactive admin shell, user invite system, and supports connecting to servers that don't support SSH keys.", "when_to_avoid": ["you need enterprise features like session recording or advanced auditing", "you require high-availability clustering out of the box", "you prefer a GUI-managed bastion solution"], "when_to_choose": ["you need a simple, self-hosted SSH bastion with minimal setup", "you want centralized SSH user/host management with role-based access", "your team needs transparent jump-host access without changing client workflows"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/sshportal", "repo": "moul/sshportal", "role": "main", "score": 67}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.365979+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:08:09.891266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ac6e8b2ff73c8a90ad03f21c3f94dfa62baf907c760c3a436dda6a435fece029", "fetched_at": "2026-08-28T04:05:57.365979+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moul/sshportal"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.365979+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:08:09.891266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ac6e8b2ff73c8a90ad03f21c3f94dfa62baf907c760c3a436dda6a435fece029", "fetched_at": "2026-08-28T04:05:57.365979+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moul/sshportal"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:08:09.891266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ac6e8b2ff73c8a90ad03f21c3f94dfa62baf907c760c3a436dda6a435fece029", "fetched_at": "2026-08-28T04:05:57.365979+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moul/sshportal"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.365979+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.365979+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.365979+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:08:09.891266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ac6e8b2ff73c8a90ad03f21c3f94dfa62baf907c760c3a436dda6a435fece029", "fetched_at": "2026-08-28T04:05:57.365979+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moul/sshportal"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.365979+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.365979+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:08:09.891266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ac6e8b2ff73c8a90ad03f21c3f94dfa62baf907c760c3a436dda6a435fece029", "fetched_at": "2026-08-28T04:05:57.365979+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moul/sshportal"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.365979+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.365979+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.365979+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:08:09.891266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ac6e8b2ff73c8a90ad03f21c3f94dfa62baf907c760c3a436dda6a435fece029", "fetched_at": "2026-08-28T04:05:57.365979+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moul/sshportal"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.365979+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.365979+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:08:09.891266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ac6e8b2ff73c8a90ad03f21c3f94dfa62baf907c760c3a436dda6a435fece029", "fetched_at": "2026-08-28T04:05:57.365979+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moul/sshportal"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:08:09.891266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ac6e8b2ff73c8a90ad03f21c3f94dfa62baf907c760c3a436dda6a435fece029", "fetched_at": "2026-08-28T04:05:57.365979+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moul/sshportal"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:08:09.891266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ac6e8b2ff73c8a90ad03f21c3f94dfa62baf907c760c3a436dda6a435fece029", "fetched_at": "2026-08-28T04:05:57.365979+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moul/sshportal"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:08:09.891266+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ac6e8b2ff73c8a90ad03f21c3f94dfa62baf907c760c3a436dda6a435fece029", "fetched_at": "2026-08-28T04:05:57.365979+00:00", "kind": "readme", "missing": false, "url": "https://github.com/moul/sshportal"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3229, "days_push": 8, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 67, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}