#!/usr/bin/env bash set -e # ============================ # CONFIG # ============================ HEADSCALE_URL="https://headscale.rozic-dev.com" TAILSCALE_BIN="tailscale" DEFAULT_HOSTNAME="$(hostname)" require_cmd() { if ! command -v "$1" >/dev/null 2>&1; then echo "ERROR: Command '$1' not found. Please install it first." >&2 exit 1 fi } require_cmd "$TAILSCALE_BIN" if ! command -v sudo >/dev/null 2>&1 && [[ $EUID -ne 0 ]]; then echo "WARNING: 'sudo' not found and you are not root." echo "You must run this script as root for 'tailscale up' to work." exit 1 fi AUTHKEY="${1:-}" if [[ -z "$AUTHKEY" ]]; then echo -n "Enter Headscale pre-auth key: " read -r AUTHKEY fi if [[ -z "$AUTHKEY" ]]; then echo "ERROR: No auth key provided." >&2 exit 1 fi echo -n "Hostname to register on Headscale [${DEFAULT_HOSTNAME}]: " read -r CUSTOM_HOSTNAME HOSTNAME_TO_USE="${CUSTOM_HOSTNAME:-$DEFAULT_HOSTNAME}" echo echo "Connecting this device to Headscale:" echo " Server : ${HEADSCALE_URL}" echo " Host : ${HOSTNAME_TO_USE}" echo TS_CMD=( "$TAILSCALE_BIN" up --reset --login-server="${HEADSCALE_URL}" --auth-key="${AUTHKEY}" --hostname="${HOSTNAME_TO_USE}" ) if [[ $EUID -ne 0 ]]; then echo "Running: sudo ${TS_CMD[*]}" sudo "${TS_CMD[@]}" else echo "Running: ${TS_CMD[*]}" "${TS_CMD[@]}" fi echo echo "✅ Done! This device should now be visible in Headscale."