#!/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 skip_tmux=0 # Check for --no-tmux flag if [[ "$1" == "--no-tmux" ]]; then skip_tmux=1 shift fi full="$1" 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 tmux session case "$host" in *-orb) ssh_host="${host%-orb}@orb" tmux_session="$host" ;; *-utm) ssh_host="${host%-utm}.utm.local" tmux_session="$host" ssh_identity="$HOME/.ssh/id_ed25519_internal" ;; *-workstation) ssh_host="${host%-workstation}.workstation.lan" tmux_session="$host" ssh_identity="$HOME/.ssh/id_ed25519_internal" ;; *) echo "Error: unknown host pattern '$host'" >&2 exit 1 ;; esac # Build SSH command safely using an array ssh_cmd=(ssh -t) # 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 [[ $skip_tmux -eq 0 ]] && ssh_cmd+=("tmux" "new" "-A" "-s" "$tmux_session") # Replace current shell with SSH command # echo "Executing: ${ssh_cmd[*]}" >&2 exec "${ssh_cmd[@]}"