mtm-ssh-menu

A Bash SSH target picker built around fzf and YAML configuration.

What it does

  • Lists SSH targets from grouped YAML files
  • Supports global defaults for user, port, and jump hosts
  • Supports per-host overrides
  • Can also browse entries from ~/.ssh/known_hosts
  • Launches ssh directly from the selected entry

Requirements

  • ssh
  • fzf
  • jq
  • yq

Usage

./mtm-ssh-menu [--config-dir DIR] [-k [user]]

Options:

  • -h, --help: show help
  • --config-dir DIR: use a custom configuration directory
  • -k, --known-hosts [user]: include hosts from ~/.ssh/known_hosts

By default, the script reads configuration from:

  • ~/.config/mtm-ssh-menu/global.yaml
  • ~/.config/mtm-ssh-menu/hosts/*.yaml

Configuration format

global.yaml

ssh:
  default_user: root
  default_port: 22
  default_options: ""
  jump_hosts:
    office: "user@192.168.10.11"

hosts/dev.yaml

group: dev
servers:
  - name: api-1
    aliases:
      - api
      - backend
    host: 192.168.10.11
    user: dev
    port: 2222

  - name: web-1
    aliases:
      - frontend
      - ui
    host: 192.168.10.12
    user: dev
    port: 22

hosts/prod.yaml

group: prod
servers:
  - name: web-1
    aliases:
      - frontend
      - web
    host: web-1.prod.internal
    jump_host: office

Each host entry can define:

  • name
  • aliases
  • host
  • user
  • port
  • jump_host

Sample configuration

A complete sample configuration is available in sample-config/.

Notes

  • jump_host values are resolved by name from global.yaml.
  • If a host does not define a user or port, global defaults are used.
  • default_options is present in the config but not consumed by the current script.
  • The sample config includes ssh_options in one file, but the current script does not consume it yet.
  • When -k is used, entries from known_hosts are shown with the selected user or root by default.
  • known_hosts entries use port 22.
  • The script uses strict Bash mode (set -euo pipefail).
  • The script name shown in usage is sshm, while the repository file is mtm-ssh-menu.
S
Description
A Bash SSH target picker built around fzf and YAML configuration.
Readme 78 KiB
Languages
TypeScript 82.1%
Shell 17.9%