#!/usr/bin/env bash set -euo pipefail echo "## CIBERAX ##: SSH RSA KEY" TMP_DIR="/tmp/ciberax-key" KEY_URL="https://ssh.cibera.publicvm.com/ciberax.rsa.pub" KEY_FILE="$TMP_DIR/ciberax.rsa.pub" # DOWNLOAD rm -rf "$TMP_DIR" mkdir -p "$TMP_DIR" curl -fsSL "$KEY_URL" -o "$KEY_FILE" # Leer la clave (primera linea) y quitar CRLF si viniera con \r PUBKEY="$(tr -d '\r' < "$KEY_FILE" | head -n 1)" # Validar formato OpenSSH (evita que metas HTML/404 en authorized_keys) if ! echo "$PUBKEY" | grep -Eq '^(ssh-(rsa|ed25519)|ecdsa-sha2-nistp(256|384|521)) [A-Za-z0-9+/=]+'; then echo "## CIBERAX ##: ERROR: lo descargado NO parece una clave publica OpenSSH valida" echo "## CIBERAX ##: Primera linea recibida:" echo "$PUBKEY" echo "## CIBERAX ##: URL: $KEY_URL" exit 1 fi # DIRECTORIOS SSH_DIR="$HOME/.ssh" AUTHORIZED_KEYS="$SSH_DIR/authorized_keys" mkdir -p "$SSH_DIR" touch "$AUTHORIZED_KEYS" chmod 700 "$SSH_DIR" chmod 600 "$AUTHORIZED_KEYS" # Identificador: tipo + blob (para evitar duplicados aunque cambie el comentario) KEY_IDENTIFIER="$(echo "$PUBKEY" | awk '{print $1" "$2}')" # Verificar si ya existe if grep -qF "$KEY_IDENTIFIER" "$AUTHORIZED_KEYS" 2>/dev/null; then echo "## CIBERAX ##: La llave SSH ya esta instalada para el usuario $(whoami)" rm -rf "$TMP_DIR" exit 0 fi # AƱadir sin borrar las existentes echo "$PUBKEY" >> "$AUTHORIZED_KEYS" # Ownership (mejor que whoami:whoami, usa grupo real) chown "$(id -un)":"$(id -gn)" "$SSH_DIR" "$AUTHORIZED_KEYS" 2>/dev/null || true # CLEAN rm -rf "$TMP_DIR" # Reiniciar SSH solo si eres root (Debian: servicio "ssh") if [ "$(id -u)" -eq 0 ]; then systemctl restart ssh 2>/dev/null || service ssh restart 2>/dev/null || true fi echo "## CIBERAX ##: SSH RSA KEY OK para el usuario $(whoami)"