sshm/README.md
Guillaume Archambault dc3fbc00d1 Add tag support and improve list display formatting
- Implement SSH host tagging with filtering capability
- Add --tag option to filter hosts by tag in list command
- Enhanced table formatting with dynamic column sizing
- Tags are sorted alphabetically for consistent display
2025-08-28 17:02:34 +02:00

5.3 KiB

SSH Manager (sshm)

SSH Manager (sshm) is a bash script that simplifies and automates the management of SSH hosts through the SSH configuration file (~/.ssh/config). It provides functionalities to list, connect, view, add, edit, and delete SSH host configurations, check the availability of hosts using pings, and manage different SSH configuration contexts.

Features

  • List all SSH hosts in the configuration file (with optional ping check).
  • Filter SSH hosts by tags for better organization.
  • Connect to an SSH host by name or number from the list.
  • View the configuration details of a specific SSH host.
  • Add a new SSH host configuration.
  • Edit an existing SSH host configuration.
  • Delete an SSH host configuration.
  • Check the availability of an SSH host using ping.
  • Manage multiple SSH configuration contexts.
  • Upgrade sshm to the latest version automatically.

Requirements

  • Bash
  • SSH
  • awk
  • sed
  • ping

Installation

  1. Clone the repository:

    git clone https://github.com/Gu1llaum-3/sshm.git
    cd sshm
    
  2. Make the script executable:

    chmod +x sshm
    
  3. Move the script to a directory in your PATH, for example:

    sudo mv sshm.bash /usr/local/bin/sshm
    

Usage

List SSH Hosts

sshm list

To check host availability with ping (may be slower if hosts are unreachable):

sshm list --ping

To filter hosts by a specific tag:

sshm list --tag production

You can combine options:

sshm list --ping --tag staging

Connect to an SSH Host

sshm <host>

You can also connect by selecting a number from the sshm list output:

sshm list
# Select a number when prompted, e.g., type "1" to connect to the first host

View SSH Host Configuration

sshm view <host>

Add a New SSH Host Configuration

sshm add

The script will prompt you to enter the host details.

Edit an Existing SSH Host Configuration

sshm edit <host>

The script will prompt you to enter the new details for the host.

Delete an SSH Host Configuration

sshm delete <host>

Check SSH Host Availability

sshm ping <host>

Manage SSH Contexts

List Available Contexts

sshm context list

This will list all available SSH configuration contexts and highlight the currently active one.

Switch to a Different Context

sshm context use <context_name>

Switches the active SSH configuration to the specified context.

Create a New Context

sshm context create <context_name>

Creates a new SSH configuration context.

Delete a Context

sshm context delete <context_name>

Deletes the specified SSH configuration context.

Upgrade sshm

sshm upgrade

Automatically checks for the latest version on GitHub and upgrades sshm if a newer version is available. The script will:

  • Check for updates from the GitHub repository
  • Display the current and available versions
  • Show the installation path (/usr/local/bin/sshm)
  • Ask for confirmation before proceeding
  • Download and install the latest version
  • Verify the installation

The upgrade will attempt to install to /usr/local/bin/sshm (may require sudo), and fall back to ~/.local/bin/sshm if needed.

Example

Listing and Connecting to SSH Hosts

# Quick list without ping check (fast)
sshm list

# List with availability check (slower if hosts are down)
sshm list --ping

# Filter by specific tag
sshm list --tag production

# Combine filtering and ping check
sshm list --ping --tag staging

Adding a New SSH Host

sshm add

You will be prompted to enter the following details:

  • Host name
  • HostName (IP address or domain)
  • User (default: current user)
  • Port (default: 22)
  • IdentityFile (default: ~/.ssh/id_rsa)
  • ProxyJump (optional)
  • Tags (optional, comma-separated)

Editing an Existing SSH Host

sshm edit myhost

You will be prompted to update the details for the host myhost.

Viewing a Host Configuration

sshm view myhost

Checking Host Availability

sshm ping myhost

Switching to a Different SSH Context

sshm context use myconfig

Switches to the myconfig SSH configuration context.

Upgrading sshm

sshm upgrade

Checks for and installs the latest version of sshm. The command will show you the current version, the available version, and ask for confirmation before upgrading.

Tags

SSH Manager supports tagging hosts for better organization and filtering. Tags are comma-separated labels that help you categorize your SSH hosts.

Using Tags

When adding or editing a host, you can specify tags:

sshm add
# When prompted, enter tags like: production, webserver, ubuntu

Filtering by Tags

Use the --tag option to filter hosts:

# Show only production hosts
sshm list --tag production

# Show only development hosts with ping check
sshm list --ping --tag development

Tag Display

Tags are displayed in the list view with a # prefix and are automatically sorted alphabetically:

  • Tags: #database #production #ubuntu

License

This project is licensed under the Apache License 2.0. See the LICENSE file for details.

Contributing

Contributions are welcome! Please open an issue or submit a pull request.