#!/usr/bin/env bash # Extract enode addresses from generated node keys set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" source "$PROJECT_ROOT/config/ip-addresses.conf" get_host_for_vmid() { local vmid=$1 if [[ "$vmid" =~ ^(1505|1506|1507|1508)$ ]]; then echo "${PROXMOX_HOST_ML110}" elif [[ "$vmid" =~ ^(2420|2430|2440|2460|2470|2480)$ ]]; then echo "${PROXMOX_HOST_R630_01}" else echo "${PROXMOX_HOST_R630_01}" fi } extract_enode() { local vmid=$1 local ip=$2 local hostname=$3 local host=$(get_host_for_vmid $vmid) # Try to get public key from private key file local pubkey=$(ssh -o StrictHostKeyChecking=no root@${host} "pct exec $vmid -- bash -c ' if [ -f /data/besu/key ]; then # Try using openssl to extract public key openssl ec -in /data/besu/key -pubout -outform DER 2>/dev/null | tail -c 65 | xxd -p -c 0 2>/dev/null || \ # Try using Besu if available find /opt -name besu -type f 2>/dev/null | head -1 | xargs -I {} {} public-key export --node-private-key-file=/data/besu/key 2>/dev/null | sed \"s/^0x//\" || \ echo \"\" fi '" 2>/dev/null | tr -d '\n' | head -c 128) if [[ -n "$pubkey" && ${#pubkey} -ge 64 ]]; then echo "$vmid|$hostname|$ip|enode://${pubkey}@${ip}:30303" else echo "$vmid|$hostname|$ip|PENDING" fi } echo "Extracting enode addresses from node keys..." ENODE_LIST="$PROJECT_ROOT/ENODE_COLLECTION_$(date +%Y%m%d_%H%M%S).txt" { echo "# Enode Collection Report" echo "# Generated: $(date)" echo "# VMID | Hostname | IP | Enode" echo "==========================================" for vmid in 1505 1506 1507 1508 2420 2430 2440 2460 2470 2480; do case $vmid in 1505) extract_enode 1505 "${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-192.168.11.21}}}}}3" "besu-sentry-alltra-1" ;; 1506) extract_enode 1506 "${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-${IP_SERVICE_21:-192.168.11.21}}}}}4" "besu-sentry-alltra-2" ;; 1507) extract_enode 1507 "${IP_RPC_244:-${IP_RPC_244:-${IP_RPC_244:-192.168.11.244}}}" "besu-sentry-hybx-1" ;; 1508) extract_enode 1508 "${IP_RPC_245:-${IP_RPC_245:-${IP_RPC_245:-192.168.11.245}}}" "besu-sentry-hybx-2" ;; 2420) extract_enode 2420 "${RPC_ALLTRA_1:-192.168.11.172}" "besu-rpc-alltra-1" ;; 2430) extract_enode 2430 "${RPC_ALLTRA_2:-192.168.11.173}" "besu-rpc-alltra-2" ;; 2440) extract_enode 2440 "${RPC_ALLTRA_3:-192.168.11.174}" "besu-rpc-alltra-3" ;; 2460) extract_enode 2460 "${RPC_HYBX_1:-192.168.11.246}" "besu-rpc-hybx-1" ;; 2470) extract_enode 2470 "${RPC_HYBX_2:-192.168.11.247}" "besu-rpc-hybx-2" ;; 2480) extract_enode 2480 "${RPC_HYBX_3:-192.168.11.248}" "besu-rpc-hybx-3" ;; esac done } > "$ENODE_LIST" echo "Enode collection saved to: $ENODE_LIST" cat "$ENODE_LIST"