{"id":33185670,"url":"https://github.com/lfaoro/ssm","last_synced_at":"2026-05-22T01:01:25.609Z","repository":{"id":288579126,"uuid":"965075356","full_name":"lfaoro/ssm","owner":"lfaoro","description":"Terminal SSH connection manager","archived":false,"fork":false,"pushed_at":"2026-05-12T12:23:22.000Z","size":1174,"stargazers_count":103,"open_issues_count":6,"forks_count":6,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-05-12T13:32:22.466Z","etag":null,"topics":["bubbletea","cli","devops","go","golang","mosh","ssh","sshpass","termius","tui"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lfaoro.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"authors","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["lfaoro"]}},"created_at":"2025-04-12T11:02:50.000Z","updated_at":"2026-05-12T12:23:27.000Z","dependencies_parsed_at":"2025-04-19T00:15:03.450Z","dependency_job_id":"3f66183e-32aa-4495-b6da-bb81bf1da1f2","html_url":"https://github.com/lfaoro/ssm","commit_stats":null,"previous_names":["lfaoro/ssm"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/lfaoro/ssm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfaoro%2Fssm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfaoro%2Fssm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfaoro%2Fssm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfaoro%2Fssm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lfaoro","download_url":"https://codeload.github.com/lfaoro/ssm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfaoro%2Fssm/sbom","scorecard":{"id":1247330,"data":{"date":"2026-05-12T12:23:48Z","repo":{"name":"github.com/lfaoro/ssm","commit":"dd289523f563b90657800673916912a6fd3f66ac"},"scorecard":{"version":"v5.3.0","commit":"c22063e786c11f9dd714d777a687ff7c4599b600"},"score":7.8,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/24 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#code-review"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dependency-update-tool"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#maintained"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#security-policy"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: topLevel permissions set to 'read-all': .github/workflows/codeql.yml:10","Info: topLevel permissions set to 'read-all': .github/workflows/go-tests.yml:8","Info: topLevel permissions set to 'read-all': .github/workflows/install_tests.yml:6","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:9","Info: topLevel permissions set to 'read-all': .github/workflows/shellcheck.yml:4","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":10,"reason":"all dependencies are pinned","details":["Info:  12 out of  12 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#packaging"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#license"}},{"name":"CII-Best-Practices","score":5,"reason":"badge detected: Passing","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (6) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#sast"}},{"name":"Signed-Releases","score":3,"reason":"2 out of the last 5 releases have a total of 2 signed artifacts.","details":["Info: signed release artifact: ssm_1.0.1_checksums.txt.asc: https://github.com/lfaoro/ssm/releases/tag/1.0.1","Info: signed release artifact: ssm_1.0.0_checksums.txt.asc: https://github.com/lfaoro/ssm/releases/tag/1.0.0","Warn: release artifact 0.4.2 not signed: https://api.github.com/repos/lfaoro/ssm/releases/315171833","Warn: release artifact 0.4.1 not signed: https://api.github.com/repos/lfaoro/ssm/releases/315148777","Warn: release artifact 0.4.0 not signed: https://api.github.com/repos/lfaoro/ssm/releases/237251126","Warn: release artifact 1.0.1 does not have provenance: https://api.github.com/repos/lfaoro/ssm/releases/316339703","Warn: release artifact 1.0.0 does not have provenance: https://api.github.com/repos/lfaoro/ssm/releases/315314673","Warn: release artifact 0.4.2 does not have provenance: https://api.github.com/repos/lfaoro/ssm/releases/315171833","Warn: release artifact 0.4.1 does not have provenance: https://api.github.com/repos/lfaoro/ssm/releases/315148777","Warn: release artifact 0.4.0 does not have provenance: https://api.github.com/repos/lfaoro/ssm/releases/237251126"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#signed-releases"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":10,"reason":"3 out of 3 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#ci-tests"}},{"name":"Contributors","score":3,"reason":"project has 1 contributing companies or organizations -- score normalized to 3","details":["Info: found contributions from: planet earth"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#contributors"}}]},"last_synced_at":"2026-05-12T13:33:43.986Z","repository_id":288579126,"created_at":"2026-05-12T13:33:43.986Z","updated_at":"2026-05-12T13:33:43.986Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33160177,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T22:39:12.733Z","status":"ssl_error","status_checked_at":"2026-05-17T22:39:10.741Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bubbletea","cli","devops","go","golang","mosh","ssh","sshpass","termius","tui"],"created_at":"2025-11-16T05:00:20.098Z","updated_at":"2026-05-18T00:13:17.103Z","avatar_url":"https://github.com/lfaoro.png","language":"Go","funding_links":["https://github.com/sponsors/lfaoro"],"categories":["\u003ca name=\"networking\"\u003e\u003c/a\u003eNetworking"],"sub_categories":[],"readme":"# Secure Shell Manager\n\n\u003e Streamline SSH connections with a simple terminal UI\n\n[![version][version-badge]](changelog.md)\n[![license][license-badge]](license)\n[![CI](https://github.com/lfaoro/ssm/actions/workflows/go-tests.yml/badge.svg)](https://github.com/lfaoro/ssm/actions/workflows/go-tests.yml)\n[![Go report card](https://goreportcard.com/badge/github.com/lfaoro/ssm)](https://goreportcard.com/report/github.com/lfaoro/ssm)\n[![Go version](https://img.shields.io/badge/Go-1.26.2-00ADD8.svg)](go.mod)\n\n[version-badge]: https://img.shields.io/badge/version-1.0.0-blue.svg\n[license-badge]: https://img.shields.io/badge/license-BSD3-blue\n\n`ssm` is an SSH connection manager that works on top of your existing SSH config and installed `ssh`/`mosh` binaries. No setup required on remote systems.\n\n**tl;dr** — [Install](#install)\n\n---\n\n## Features\n\n- **Tag-based filtering** — `#tag: admin,vpn` comments in your SSH config become searchable metadata\n- **Fuzzy search** — find hosts by name, hostname, user, or tag\n- **SSH/MOSH dual protocol** — switch with `TAB`\n- **Live config editing** — `ctrl+e` opens `$EDITOR`, auto-reloads on save\n- **Run remote commands** — `ctrl+r` opens a command prompt, runs via `ssh -T`\n- **Config inspection** — `ctrl+v` shows all params in a side panel\n- **`--exit` flag** — connect and hand off the terminal, no lingering process\n- **Theming** — `--theme sky|matrix`, extensible via `themes.go`\n\n## Shoutout\n\n**[@hackerschoice](https://x.com/hackerschoice/status/1920899798837711279)** on X\n\n## Usage\n\n```bash\nssm                    # launch the TUI\nssm admin              # filter by #tag: admin\nssm -se vpn            # --show --exit, filter by vpn tags\nssm -c ~/.ssh/other    # use a custom config file\nssm -o                 # show tagged hosts first\nssm --theme sky        # blue color scheme\nssm -d                 # debug mode with verbose logs\n```\n\n| Flag | Short | Description |\n|---|---|---|\n| `--show` | `-s` | show config in side panel on launch |\n| `--exit` | `-e` | exit after connecting (hand off terminal) |\n| `--order` | `-o` | show tagged hosts first |\n| `--config` | `-c` | custom SSH config path |\n| `--theme` | `-t` | color theme: `sky` or `matrix` |\n| `--debug` | `-d` | debug mode with verbose log |\n\nAll flags support env vars: `SSM_SHOW`, `SSM_EXIT`, `SSM_ORDER`, `SSM_SSH_CONFIG_PATH`, `SSM_THEME`, `SSM_DEBUG`.\n\n## Keys\n\n| Key | Action |\n|---|---|\n| `enter` | connect to selected host |\n| `ctrl+e` | edit SSH config in `$EDITOR` |\n| `ctrl+v` | toggle config side panel |\n| `ctrl+r` | run commands on host (no TTY) |\n| `ctrl+c` | clear filter / quit |\n| `tab` | switch between SSH and MOSH |\n| `/` | filter hosts |\n| `q` / `esc` | quit / exit filter |\n\n## Quickstart\n\n\u003e New to SSH config? Start here. Otherwise skip to [Install](#install).\n\n- [SSH config manual](https://man.openbsd.org/ssh_config.5)\n\n```bash\n# backup any existing config\n[ -f ~/.ssh/config ] \u0026\u0026 cp ~/.ssh/config ~/.ssh/config.bak\n\n# create a config\ncat \u003c\u003c'EOF' \u003e\u003e ~/.ssh/config\n#tagorder            # prioritize tagged hosts in list-view\n\nHost myserver\n#tag: production,web\n    User admin\n    HostName 10.0.0.5\n    Port 2222\n    IdentityFile ~/.ssh/id_rsa\n\nHost terminalcoffee\n#tag: shops\n    User adam\n    HostName terminal.shop\nEOF\n\nchmod 600 ~/.ssh/config\n```\n\n## Install\n\nDownload a binary from [releases](https://github.com/lfaoro/ssm/releases), or install via script/brew:\n\n```bash\n# shell script (linux, macos, freebsd, netbsd, openbsd, solaris)\ncurl -sSL https://github.com/lfaoro/ssm/raw/main/scripts/get.sh | bash\n\n# homebrew (macos, linux)\nbrew install lfaoro/tap/ssm\n\n# macos quarantine workaround (no paid signing key)\nxattr -d com.apple.quarantine /path/to/ssm\n```\n\nAvailable for **6 OSes** × **4 architectures**: x86_64, i386, arm64, arm.\n\n## Build\n\n\u003e Requires [Go](https://go.dev/doc/install) 1.26+\n\n```bash\ngo install github.com/lfaoro/ssm@latest\n\n# or clone and build\ngit clone https://github.com/lfaoro/ssm.git \u0026\u0026 cd ssm \u0026\u0026 make \u0026\u0026 bin/ssm\n\n# sourcehut mirror\ngit clone https://git.sr.ht/~faoro/ssm \u0026\u0026 cd ssm \u0026\u0026 make \u0026\u0026 bin/ssm\n```\n\n## Development\n\n```bash\ngo build ./...          # check compilation\ngo vet ./...            # static analysis\ngo test -race ./...     # tests with race detection\nmake build-static       # static binary (CGO_ENABLED=0)\nmake release-dev        # goreleaser snapshot (dry run)\n```\n\n## Resources\n\n- [CLI flags reference](data/help)\n- [SSH config example](data/config_example)\n- [Changelog](changelog.md)\n\n## Contributors\n\n[See all](https://github.com/lfaoro/ssm/graphs/contributors)\n\nPull requests are welcome. Report a bug or request a feature by opening a [new issue](https://github.com/lfaoro/ssm/issues).\n\n## Show support\n\n\u003e If `ssm` is useful to you, please consider giving it a ⭐.\n\n- **star the repo**\n- **tell your friends**\n\n[GitHub sponsor](https://github.com/sponsors/lfaoro) ·\n[BTC](https://mempool.space/address/bc1qzaqeqwklaq86uz8h2lww87qwfpnyh9fveyh3hs) ·\n[XMR](https://xmrchain.net/search?value=89XCyahmZiQgcVwjrSZTcJepPqCxZgMqwbABvzPKVpzC7gi8URDme8H6UThpCqX69y5i1aA81AKq57Wynjovy7g4K9MeY5c) ·\n[FIAT](https://revolut.me/matrix)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flfaoro%2Fssm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flfaoro%2Fssm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flfaoro%2Fssm/lists"}