Add scripts/ssh_server_menu.sh

This commit is contained in:
2026-04-19 00:24:47 -03:00
parent bba44b1f1a
commit 4cc08d5ca9
+72
View File
@@ -0,0 +1,72 @@
#!/usr/bin/env bash
#
# Open an interactive menu and connect to a selected server through SSH.
#
# This is useful for small operations teams that frequently access a known
# list of Linux servers. Edit the SERVERS array to match your environment.
#
# Usage:
# bash ssh_server_menu.sh
#
# Server format:
# "Display Name|ssh_user|hostname_or_ip|port"
set -Eeuo pipefail
SERVERS=(
"Production Web 01|deploy|192.0.2.10|22"
"Production Database 01|postgres|192.0.2.20|22"
"Monitoring Server|admin|192.0.2.30|22"
"Backup Server|backup|192.0.2.40|22"
)
print_menu() {
clear
printf 'SSH Server Menu\n'
printf '===============\n\n'
local index=1
local item name
for item in "${SERVERS[@]}"; do
IFS='|' read -r name _ _ _ <<< "$item"
printf '%s) %s\n' "$index" "$name"
index=$((index + 1))
done
printf 'q) Quit\n\n'
}
connect_to_server() {
local selected="$1"
local name user host port
IFS='|' read -r name user host port <<< "$selected"
printf 'Connecting to %s (%s@%s:%s)...\n' "$name" "$user" "$host" "$port"
ssh -p "$port" "${user}@${host}"
}
while true; do
print_menu
read -rp 'Choose a server: ' choice
case "$choice" in
q|Q)
printf 'Bye.\n'
exit 0
;;
''|*[!0-9]*)
printf 'Invalid option. Press Enter to try again.'
read -r _
;;
*)
if (( choice >= 1 && choice <= ${#SERVERS[@]} )); then
connect_to_server "${SERVERS[$((choice - 1))]}"
else
printf 'Invalid option. Press Enter to try again.'
read -r _
fi
;;
esac
done