#!/usr/bin/env bash # ~/bin/vm # # SSH helper script for connecting to VMs or workstations. # Usage: # vm [--no-tmux] # # 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[@]}"