Add scripts/ssh_server_menu.sh
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user