Kasper Juul Hermansen 807498f777
All checks were successful
continuous-integration/drone/push Build is passing
chore: Configure Renovate (#4)
Add renovate.json

Reviewed-on: #4
2025-07-07 12:10:35 +02:00
2025-07-06 20:57:19 +02:00
2025-07-06 20:52:40 +02:00
2025-07-06 20:52:40 +02:00
2025-07-06 21:11:13 +02:00
2025-07-06 21:11:13 +02:00
2025-07-06 21:00:56 +02:00
2025-07-06 21:04:36 +02:00
2025-07-07 12:10:35 +02:00

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

cargo install nossh

Or build from source:

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

    nossh
    
    • Fuzzy-find against:

      • Your cached history of ssh … commands.
      • Host entries in your ~/.ssh/config.
  2. Run a past command or config entry

    # 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

    nossh user@host -p 2222
    

    Behaves exactly like ssh …; also logs the invocation for future fuzzy lookup.


Usage

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:

    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:

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

    nossh
    
  • Forced interactive

    nossh interactive
    
  • One-liner passthrough

    nossh -i ~/.ssh/id_ed25519 root@example.com
    

Development

Clone and run tests:

git clone https://github.com/kjuulh/nossh.git
cd nossh
cargo test

License

MIT-licensed


Description
No description provided
Readme 95 KiB
v0.1.3 Latest
2025-07-06 21:11:44 +02:00
Languages
Rust 100%