nossh/README.md
kjuulh 7a0d72405f
All checks were successful
continuous-integration/drone/push Build is passing
feat: add readme
2025-07-06 21:04:36 +02:00

172 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# nossh
A lightning-fast SSH endpoint finder and launcher with fuzzy history lookup and ⬢ `.ssh/config` reference.
---
## Features
- **Fuzzy history search**
Quickly fuzzy-find and re-run past `ssh` commands youve executed.
- **`.ssh/config` lookup**
Instantly search host entries from your `~/.ssh/config`.
- **Interactive mode**
Presents a searchable list of endpoints for one-shot selection.
- **External invocation**
Falls back to standard `ssh` when provided arguments.
- **Configurable config path**
Override the default `~/.ssh/config` via an `--ssh-config-path` flag or `SSH_CONFIG_PATH` env var.
---
## Installation
```bash
cargo install nossh
````
Or build from source:
```bash
git clone https://github.com/yourorg/nossh.git
cd nossh
cargo build --release
cp target/release/nossh /usr/local/bin/
```
---
## Quickstart
1. **Launch interactive search**
```bash
nossh
```
* Fuzzy-find against:
* Your cached history of `ssh …` commands.
* Host entries in your `~/.ssh/config`.
2. **Run a past command or config entry**
```bash
# Start typing “git.fr” and press Enter:
$ nossh
1. ratchet:22
2. somegateway:222
# 3. git.front.kjuulh.io
> git.fr
# then Enter runs:
ssh git.front.kjuulh.io
```
3. **Direct `ssh` passthrough**
```bash
nossh user@host -p 2222
```
Behaves exactly like `ssh …`; also logs the invocation for future fuzzy lookup.
---
## Usage
```text
nossh [--ssh-config-path <path>] [<ssh-args>...]
```
| Option | Description |
| ------------------------ | ---------------------------------------------------------------------------------------------- |
| `--ssh-config-path PATH` | Path to your SSH `config` file (default: `~/.ssh/config`). Overrides `SSH_CONFIG_PATH` env var |
| `<ssh-args>` | If provided, forwarded to `ssh` as normal. |
### Environment
* `SSH_CONFIG_PATH`
Alternative way to point to your SSH config:
```bash
export SSH_CONFIG_PATH="/custom/path/config"
```
---
## Configuration
The default SSH config path is `${HOME}/.ssh/config`. If that file is missing or you wish to use a different config, set the flag or env var:
```bash
nossh --ssh-config-path /mnt/shared/ssh_config
```
---
## How It Works
1. **Startup**
* Reads `~/.ssh/config` (or your override).
* Loads your SSHcommand history database (`~/.local/share/nossh/db.sqlite3`).
2. **Interactive Mode**
* Presents a fuzzy prompt (via `fzf`-style) combining:
* Host patterns from config.
* Host strings from history (e.g. `user@host -p 2222`).
3. **Selection**
* On Enter, launches `ssh` with the selected arguments.
* In external (non-interactive) mode, simply proxies `ssh …` and appends to history.
---
## Examples
* **Basic interactive**
```bash
nossh
```
* **Forced interactive**
```bash
nossh interactive
```
* **One-liner passthrough**
```bash
nossh -i ~/.ssh/id_ed25519 root@example.com
```
---
## Development
Clone and run tests:
```bash
git clone https://github.com/kjuulh/nossh.git
cd nossh
cargo test
```
---
## License
MIT-licensed
```