🔧 Where my dotfiles lives in harmony and peace, most of the time
at main 50 lines 1.6 kB view raw
1#!/usr/bin/env bash 2set -euo pipefail 3 4SCRIPT_DIR="$(dirname "$(realpath "$0")")" 5NAME="zen" 6LOCATION="nbg1" 7TYPE="cax11" 8IMAGE="ubuntu-24.04" 9SSH_KEY="helix" 10FIREWALL="ts-only" 11 12echo "Creating server ${NAME}..." 13hcloud server create \ 14 --name "$NAME" \ 15 --location "$LOCATION" \ 16 --type "$TYPE" \ 17 --image "$IMAGE" \ 18 --ssh-key "$SSH_KEY" \ 19 --user-data-from-file "${SCRIPT_DIR}/cloud-init.yaml" 20 21IP=$(hcloud server ip "$NAME") 22echo "Server ${NAME} created at ${IP}" 23 24echo "Waiting for cloud-init to finish..." 25until ssh -o StrictHostKeyChecking=accept-new -o ConnectTimeout=10 "david@${IP}" "cloud-init status" 2>/dev/null | grep -q "done"; do 26 sleep 10 27done 28echo "Cloud-init done." 29 30echo "" 31echo "SSH into the server and run: sudo tailscale up" 32echo " ssh david@${IP}" 33echo "" 34read -r -p "Press Enter once Tailscale is set up on ${NAME}..." 35 36TS_IP=$(ssh "david@${IP}" "tailscale ip -4") 37echo "Tailscale IP: ${TS_IP}" 38 39echo "Creating firewall ${FIREWALL}..." 40hcloud firewall create --name "$FIREWALL" 2>/dev/null || true 41hcloud firewall add-rule --direction in --protocol udp --port 41641 --source-ips 0.0.0.0/0 --source-ips ::/0 "$FIREWALL" 2>/dev/null || true 42hcloud firewall add-rule --direction in --protocol tcp --port 22 --source-ips 100.64.0.0/10 "$FIREWALL" 2>/dev/null || true 43hcloud firewall apply-to-resource --type server --server "$NAME" "$FIREWALL" 44echo "Firewall ${FIREWALL} applied." 45 46echo "" 47echo "Verifying Tailscale SSH..." 48ssh -o ConnectTimeout=5 "david@${TS_IP}" "hostname" 49echo "" 50echo "Done. Connect with: ssh david@${TS_IP}"