Last active
July 27, 2025 17:57
-
-
Save lucapericlp/6101d62a3c47f0415b3d051eda9480aa to your computer and use it in GitHub Desktop.
Revisions
-
lucapericlp renamed this gist
Jul 27, 2025 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
lucapericlp created this gist
Jul 27, 2025 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,83 @@ #!/bin/bash # A script to terminate an EC2 instance and remove its local SSH config entry. # --- Configuration --- SSH_CONFIG_FILE="$HOME/.ssh/config" # Exit script if any command fails. set -e # --- 1. Get SSH Alias from Command Line --- if [ -z "$1" ]; then echo "β Error: No SSH alias provided." echo "Usage: $0 <ssh-alias>" exit 1 fi SSH_ALIAS="$1" # --- 2. Find Instance ID from SSH Config --- echo "π Searching for '$SSH_ALIAS' in $SSH_CONFIG_FILE..." # Find the line number of the "Host" directive for the given alias. # We use `head -n 1` to ensure we only act on the first match if there are duplicates. HOST_LINE_NUM=$(grep -n "Host $SSH_ALIAS" "$SSH_CONFIG_FILE" | head -n 1 | cut -d: -f1) if [ -z "$HOST_LINE_NUM" ]; then echo "β Error: Could not find an SSH entry for alias '$SSH_ALIAS' in $SSH_CONFIG_FILE." exit 1 fi # The launch script places a comment with the Instance ID on the line directly above the "Host" line. COMMENT_LINE_NUM=$((HOST_LINE_NUM - 1)) # Extract the Instance ID from that comment line using sed and awk. INSTANCE_ID=$(sed -n "${COMMENT_LINE_NUM}p" "$SSH_CONFIG_FILE" | awk '{print $6}') # Validate that we found a plausible instance ID. if [[ -z "$INSTANCE_ID" || ! "$INSTANCE_ID" =~ ^i- ]]; then echo "β Error: Could not parse a valid Instance ID for alias '$SSH_ALIAS'." echo "Please check the formatting in $SSH_CONFIG_FILE around line $HOST_LINE_NUM." exit 1 fi echo "β Found Instance ID: $INSTANCE_ID" # --- 3. Confirm and Terminate Instance --- read -p "Are you sure you want to terminate instance $INSTANCE_ID? [y/N] " confirm # This regex checks for 'y' or 'Y'. if [[ ! "$confirm" =~ ^[yY] ]]; then echo "Termination cancelled." exit 0 fi echo "ποΈ Terminating instance $INSTANCE_ID..." # Redirect stdout to /dev/null to keep the output clean. aws ec2 terminate-instances --instance-ids "$INSTANCE_ID" --output text > /dev/null echo "β³ Waiting for instance to fully terminate..." aws ec2 wait instance-terminated --instance-ids "$INSTANCE_ID" echo "β Instance terminated." # --- 4. Clean up SSH Config --- echo "π§Ή Cleaning up SSH config entry..." # The block created by the launch script is 10 lines total, plus a preceding blank line. # This makes it hard to remove robustly without line numbers. # The block starts with a blank line, then a comment, then the "Host" line. # So, the block to delete starts 2 lines *before* our HOST_LINE_NUM. START_DELETE=$((HOST_LINE_NUM - 2)) # The block ends 7 lines *after* our HOST_LINE_NUM. END_DELETE=$((HOST_LINE_NUM + 7)) # Use sed to delete the line range. The `-i.bak` option creates a backup and # is compatible with both Linux (GNU) and macOS (BSD) versions of sed. sed -i.bak "${START_DELETE},${END_DELETE}d" "$SSH_CONFIG_FILE" echo "β SSH config entry removed. Original config saved to ${SSH_CONFIG_FILE}.bak" # --- 5. Final Output --- echo "--------------------------------------------------" echo "β Success! Instance '$INSTANCE_ID' has been terminated and config cleaned up." echo "--------------------------------------------------"