82 lines
1.9 KiB
Bash
Executable File
82 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ~/bin/vm
|
|
#
|
|
# SSH helper script for connecting to VMs or workstations.
|
|
# Usage:
|
|
# vm [--no-tmux] <host>
|
|
#
|
|
# Host patterns:
|
|
# personal-orb -> ssh $USER@personal@orb
|
|
# personal-utm -> ssh $USER@personal.utm.local
|
|
# personal-workstation -> ssh $USER@personal.workstation.lan
|
|
#
|
|
# Optional:
|
|
# --no-tmux -> skips attaching to tmux session
|
|
|
|
# TMP: Tmux will be disabled (switch to 0 to enable it again)
|
|
skip_tmux=0
|
|
|
|
# Check for --no-tmux flag
|
|
if [[ "$1" == "--no-tmux" ]]; then
|
|
skip_tmux=1
|
|
shift
|
|
fi
|
|
|
|
full="$1"
|
|
shift # remove host from args
|
|
|
|
user="$USER"
|
|
host="$full"
|
|
|
|
# Split user@host if explicitly specified
|
|
if [[ "$full" == *@* ]]; then
|
|
user="${full%@*}"
|
|
host="${full#*@}"
|
|
fi
|
|
|
|
# Map host patterns to SSH target and machine type
|
|
case "$host" in
|
|
*-orb)
|
|
ssh_host="${host%-orb}@orb"
|
|
TARGET_MACHINE="orb"
|
|
;;
|
|
*-utm)
|
|
ssh_host="${host%-utm}.utm.local"
|
|
TARGET_MACHINE="utm"
|
|
ssh_identity="$HOME/.ssh/id_ed25519_internal"
|
|
;;
|
|
*-workstation)
|
|
ssh_host="${host%-workstation}.workstation.lan"
|
|
TARGET_MACHINE="workstation"
|
|
ssh_identity="$HOME/.ssh/id_ed25519_internal"
|
|
;;
|
|
*)
|
|
echo "Error: unknown host pattern '$host'" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Always use "default" tmux session
|
|
tmux_session="default"
|
|
|
|
# Build SSH command safely using an array
|
|
ssh_cmd=(ssh -tt)
|
|
|
|
# Include identity file if needed
|
|
[[ -n "$ssh_identity" ]] && ssh_cmd+=(-i "$ssh_identity" -o IdentitiesOnly=yes)
|
|
|
|
# Add target user and host
|
|
ssh_cmd+=("$user@$ssh_host")
|
|
|
|
# Add tmux session unless skipped
|
|
if [[ $skip_tmux -eq 0 ]]; then
|
|
ssh_cmd+=("tmux" "new-session" "-As" "$tmux_session" "-e" "TARGET_MACHINE=$TARGET_MACHINE")
|
|
else
|
|
# Pass through any extra args user supplied
|
|
ssh_cmd+=("$@")
|
|
fi
|
|
|
|
# echo "Executing: ${ssh_cmd[*]}" >&2
|
|
exec "${ssh_cmd[@]}"
|
|
|