0.0.6
mtm-ssh-menu
A Bash SSH target picker built around fzf and YAML configuration.
What it does
- Lists SSH targets from grouped YAML files
- Uses the
groupvalue from each YAML file as the displayed group name - Allows the YAML file name to differ from the group name
- Supports global defaults for user, port, and jump hosts
- Supports per-host overrides
- Can also browse entries from
~/.ssh/known_hosts - Launches
sshdirectly from the selected entry
Requirements
sshfzfjqyq
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"
office-alt: "user@192.168.10.11:2222"
hosts/01_prod.yaml
group: prod
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/03_dev.yaml
group: dev
servers:
- name: web-1
aliases:
- frontend
- web
host: web-1.prod.internal
jump_host: office
The file name does not need to match the group value. The script reads the group from the YAML content and uses the file path internally to load the selected host.
The sample configuration now uses numbered file names such as 01_prod.yaml, 02_staging.yaml, and 03_dev.yaml.
Each host entry can define:
namealiaseshostuserportjump_host
Sample configuration
A complete sample configuration is available in sample-config/.
Notes
jump_hostvalues are resolved by name fromglobal.yaml.- Jump hosts support
user@hostanduser@host:port; if the port is omitted,22is used. - If a host does not define a user or port, global defaults are used.
default_optionsis present in the config but not consumed by the current script.- The sample config includes
ssh_optionsin one file, but the current script does not consume it yet. - Sample host examples are stored as
sample-config/hosts/01_prod.yaml,02_staging.yaml, and03_dev.yaml. - The
groupkey is required for each host config file; the file name is only an internal storage detail. - When
-kis used, entries fromknown_hostsare shown with the selected user orrootby default. known_hostsentries use port22.- The script uses strict Bash mode (
set -euo pipefail). - The script name shown in usage is
sshm, while the repository file ismtm-ssh-menu.
Description
Languages
TypeScript
82.1%
Shell
17.9%