#!/usr/bin/env bash set -euo pipefail # === METADATA === SCRIPT_NAME="$(basename "$0")" # === CONFIGURATION === : "${NODE_NAME:=node-a}" # === FUNCTIONS === log_info() { echo "[INFO] $(date -Iseconds) $*"; } log_warn() { echo "[WARN] $(date -Iseconds) $*" >&2; } main() { log_info "Starting $SCRIPT_NAME - ROLLBACK SSH config..." local config="$HOME/.ssh/config" echo "" echo "============================================" echo " SSH CONFIG ROLLBACK" echo "============================================" echo "" # List available backups echo "Available backups:" ls -la "$HOME/.ssh/config.bak."* 2>/dev/null || echo " (none found)" echo "" local latest_backup latest_backup=$(ls -t "$HOME/.ssh/config.bak."* 2>/dev/null | head -1 || true) if [[ -z "$latest_backup" ]]; then log_warn "No backup files found" echo "" echo "Alternative: Manually remove the $NODE_NAME entry from ~/.ssh/config" exit 0 fi echo "Latest backup: $latest_backup" echo "" read -p "Restore from this backup? (y/N): " confirm if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then log_info "Aborted - no changes made" exit 0 fi # Create a backup of current config before restoring if [[ -f "$config" ]]; then cp "$config" "$config.pre-rollback.$(date +%Y%m%d%H%M%S)" log_info "Current config backed up" fi # Restore from backup cp "$latest_backup" "$config" chmod 600 "$config" log_info "SSH config restored from $latest_backup" log_info "Completed $SCRIPT_NAME" } [[ "${BASH_SOURCE[0]}" == "$0" ]] && main "$@"