{"id":48443871,"url":"https://github.com/calambrenet/sshr","last_synced_at":"2026-04-06T17:01:22.102Z","repository":{"id":347598813,"uuid":"1194567548","full_name":"calambrenet/sshr","owner":"calambrenet","description":"A modern SSH connection manager written in Rust","archived":false,"fork":false,"pushed_at":"2026-03-28T15:38:07.000Z","size":33,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-28T17:49:04.704Z","etag":null,"topics":["cli","devops","rust","ssh","ssh-client","terminal"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/calambrenet.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-28T14:32:48.000Z","updated_at":"2026-03-28T15:38:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/calambrenet/sshr","commit_stats":null,"previous_names":["calambrenet/sshr"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/calambrenet/sshr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calambrenet%2Fsshr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calambrenet%2Fsshr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calambrenet%2Fsshr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calambrenet%2Fsshr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/calambrenet","download_url":"https://codeload.github.com/calambrenet/sshr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calambrenet%2Fsshr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31481238,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T14:34:32.243Z","status":"ssl_error","status_checked_at":"2026-04-06T14:34:31.723Z","response_time":112,"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":["cli","devops","rust","ssh","ssh-client","terminal"],"created_at":"2026-04-06T17:00:55.396Z","updated_at":"2026-04-06T17:01:22.095Z","avatar_url":"https://github.com/calambrenet.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sshr\n\n[![CI](https://github.com/calambrenet/sshr/actions/workflows/ci.yml/badge.svg)](https://github.com/calambrenet/sshr/actions/workflows/ci.yml)\n[![Crates.io](https://img.shields.io/crates/v/sshr.svg)](https://crates.io/crates/sshr)\n[![License](https://img.shields.io/badge/license-MIT%2FApache--2.0-blue.svg)](https://github.com/calambrenet/sshr#license)\n\n**SSH Reimagined.** A modern SSH connection manager written in Rust.\n\n`sshr` reads your existing `~/.ssh/config` and extends it with fuzzy search, key auditing, tunnel management, and more — without replacing your workflow.\n\n\u003e **Status:** Early development. Core CLI structure is in place; commands are being implemented incrementally.\n\n## Table of Contents\n\n- [Features](#features)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Building from Source](#building-from-source)\n- [Running Tests](#running-tests)\n- [Contributing](#contributing)\n- [Roadmap](#roadmap)\n- [Author](#author)\n- [License](#license)\n\n## Features\n\n- **Drop-in SSH compatibility** — `sshr host` works just like `ssh host`, no subcommand required\n- **List \u0026 search** hosts from your SSH config with fuzzy matching\n- **Connect** with overrides (port, user, verbose, persistent reconnect)\n- **Add \u0026 remove** hosts directly from the command line\n- **Key management** — list, audit, and generate SSH keys\n- **Tunnel management** — create, list, and stop SSH port-forwarding tunnels\n- **Config linting** — validate your SSH config for common errors\n- **Known hosts management** — manage trust and fingerprint history\n- **File transfer** — copy files via SCP/SFTP with progress and resume\n- **Connection status** — view active SSH sessions and tunnels\n- **Shell completions** — generate completions for bash, zsh, fish, and more\n- **Multiple output formats** — text, JSON, and CSV\n\n## Installation\n\n### From crates.io\n\n```bash\ncargo install sshr\n```\n\n### From source\n\n```bash\ngit clone https://github.com/calambrenet/sshr.git\ncd sshr\ncargo install --path .\n```\n\n### Requirements\n\n- Rust 1.93+ (edition 2024)\n- OpenSSH client installed on your system\n\n## Usage\n\n### Connecting to hosts\n\n`sshr` is compatible with the SSH invocation style — just pass the host directly:\n\n```bash\n# These are equivalent:\nsshr myserver\nsshr connect myserver\nssh myserver\n\n# With user and flags:\nsshr root@192.168.1.100\nsshr -p 2222 myserver\nsshr myserver -- -L 8080:localhost:80\n```\n\nThe explicit `connect` subcommand is still available and supports aliases:\n\n```bash\nsshr connect myserver\nsshr c myserver -p 2222 -u root\n```\n\n\u003e **Note:** If a host has the same name as a subcommand (e.g., `Host list` in your config), use `sshr connect list` explicitly.\n\n### Managing hosts\n\n```bash\n# List all configured SSH hosts\nsshr list\nsshr ls                        # alias\n\n# Fuzzy search across hosts\nsshr search prod\n\n# Add a new host\nsshr add myserver 192.168.1.100 -u deploy -p 22 --tags web,production\n\n# Remove a host\nsshr rm myserver\n\n# Show detailed host info\nsshr show myserver\n\n# Lint your SSH config\nsshr lint --warnings\n```\n\n### Key and tunnel management\n\n```bash\n# Manage SSH keys\nsshr keys list\nsshr keys audit\nsshr keys generate mykey\n\n# Manage tunnels\nsshr tunnel add myserver -l 8080 -r localhost:80 --background\nsshr tunnel list\nsshr tunnel stop myserver\n```\n\n### Other commands\n\n```bash\n# File transfer\nsshr cp local.txt myserver:/tmp/ --progress\n\n# View connection status\nsshr status\n\n# Generate shell completions\nsshr completions bash \u003e ~/.bash_completion.d/sshr\nsshr completions zsh \u003e ~/.zfunc/_sshr\nsshr completions fish \u003e ~/.config/fish/completions/sshr.fish\n```\n\n### Global options\n\n```\n-F, --config-file \u003cPATH\u003e   Path to SSH config file [default: ~/.ssh/config] [env: SSHR_CONFIG]\n    --no-color             Disable colored output [env: NO_COLOR]\n    --format \u003cFORMAT\u003e      Output format: text, json, csv [default: text]\n```\n\n## Building from Source\n\n```bash\ngit clone https://github.com/calambrenet/sshr.git\ncd sshr\ncargo build --release\n```\n\nThe binary will be at `target/release/sshr`.\n\n## Running Tests\n\n```bash\ncargo test                     # All tests (unit + integration)\ncargo clippy                   # Lint\ncargo fmt --check              # Check formatting\n```\n\n## Contributing\n\nContributions are welcome! Whether it's bug reports, feature requests, documentation improvements, or code — all help is appreciated.\n\n\u003e **Important:** AI-generated code (LLMs, Copilot, etc.) is not accepted.\n\u003e We value human-written contributions. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\n\nPlease read [CONTRIBUTING.md](CONTRIBUTING.md) for details on:\n\n- How to set up your development environment\n- The pull request process\n- Code style guidelines\n\n### Quick start for contributors\n\n```bash\n# Fork and clone\ngit clone https://github.com/\u003cyour-username\u003e/sshr.git\ncd sshr\n\n# Create a branch\ngit checkout -b my-feature\n\n# Make changes, then verify\ncargo fmt --check\ncargo clippy -- -D warnings\ncargo test\n\n# Push and open a pull request\n```\n\n## Roadmap\n\nThis project is in active development. Here's what's implemented and what's planned:\n\n- [x] CLI structure with all subcommands\n- [x] SSH config parsing (`~/.ssh/config`)\n- [x] `connect` command with SSH process delegation\n- [x] Implicit connect (`sshr host` without subcommand)\n- [x] Shell completions generation\n- [ ] `list` — Host listing with filtering and sorting\n- [ ] `search` — Fuzzy search across hosts\n- [ ] `add` / `remove` — Config file modification\n- [ ] `show` — Detailed host information\n- [ ] `lint` — Config validation and error detection\n- [ ] `keys` — Key listing, auditing, and generation\n- [ ] `tunnel` — Tunnel creation and management\n- [ ] `history` — Connection history and auditing\n- [ ] `transfer` — SCP/SFTP file transfer\n- [ ] `status` — Active connection monitoring\n- [ ] `Include` directive support in config parser\n\n## Author\n\n**Jose Luis Castro Sola** ([@calambrenet](https://github.com/calambrenet))\n\n## License\n\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or \u003chttps://www.apache.org/licenses/LICENSE-2.0\u003e)\n- MIT License ([LICENSE-MIT](LICENSE-MIT) or \u003chttps://opensource.org/licenses/MIT\u003e)\n\nat your option.\n\n### Contribution licensing\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalambrenet%2Fsshr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcalambrenet%2Fsshr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalambrenet%2Fsshr/lists"}