3 releases

0.1.3 Dec 19, 2019
0.1.2 Nov 30, 2019
0.1.0 Nov 30, 2019

#80 in #quickly

22 downloads per month

MIT license

9KB
137 lines

🖥️ sshh

(aka ssh hosts) - Quickly SSH into hosts

Actions Status Crates.io

Problem:

  • dozens of hosts to SSH in to but I can never remember the particular IP
  • cannot use domain name because they sit behind Cloudflare (sometimes)
  • unable to use subdomain because it can expose the IP (sometimes)
  • .ssh/config doesn't support grouping of servers
  • My .bashrc file was filling up with messy aliases

sshh allows you to list all your hosts in a configuration file, and then connect to them using a name.

Usage

$ sshh project-server # connect to the `project-server` host

$ sshh -g acme-corp main # connect to the `main` host under the `acme-corp` group

Given an ambiguous host name, sshh will connect to the last one defined in the config file.

sshh ends up calling ssh with the suitable arguments, so make sure it is installed.

Installation

  1. Install using cargo: cargo install sshh
  2. Download a binary from the GitHub Releases page
  3. Build and install yourself:
    1. Clone the repository
    2. Build using cargo build --release
    3. Install using cargo install --path .

Config

sshh uses the yaml file format, generally stored in ~/.config/sshh.yml. You can pass a custom config through the -c flag.

A server has the following options:

  • name: the server name
  • user (optional): defaults to "root"
  • host: the domain or IP address
  • port (optional): defaults to 22
  • forwarding (optional): whether to enable authentication agent forwarding, defaults to false
  • identity_key (optional): the location of the identity key to use, defaults to nothing

Servers can be put into groups, or listed separately. List individual servers under the servers mapping, and groups under groups. The config file is deserialized using serde_yaml. The example below should give a good indication of the expected format.

servers:
    - name: project-server
      user: banana
      host: 1.2.3.4
      port: 1337
      forwarding: true
    - name: vpn
      host: 2.3.4.5
groups:
    - name: random-company
      servers:
          - name: main
            user: app
            host: random-company.com
          - name: backup
            user: app
            host: backup.random-company.com
    - name: acme-corp
      servers:
          - name: main
            host: main.acme-corp.com
          - name: venus
            host: venus.acme-corp.com

Dependencies

~3–4.5MB
~80K SLoC