#!/bin/bash

# ======================================================================
# Archivo:       agregarssh
# Ruta:          /usr/local/bin/
# Autor:         Charlie Martínez® <cmartinez@quirinux.org>
# Licencia:      https://www.gnu.org/licenses/gpl-2.0.txt
# Propósito:     Instala clave SSH
# Distribución:  Quirinux 2.x
# ======================================================================

#
# Copyright (c) 2019-2025 Charlie Martínez, derechos reservados.
# Licencia: https://www.gnu.org/licenses/gpl-2.0.txt
# Usos autorizados y no autorizados de la marca Quirinux:
# Ver https://www.quirinux.org/aviso-legal
#

# ----------------------------------------------------------------------
# Comprobar argumentos
# ----------------------------------------------------------------------

if [ $# -ne 1 ]; then
  echo "Uso: $0 <fichero_clave>"
  exit 1
fi

# ----------------------------------------------------------------------
# Asignar el parámetro a una variable
# ----------------------------------------------------------------------

FICHERO_CLAVE=$1

# ----------------------------------------------------------------------
# Comprobar si el fichero existe
# ----------------------------------------------------------------------

if [ ! -f "$FICHERO_CLAVE" ]; then
  echo "El archivo $FICHERO_CLAVE no existe."
  exit 2
fi

# ----------------------------------------------------------------------
# Crear el directorio ~/.ssh si no existe
# ----------------------------------------------------------------------

if [ ! -d "$HOME/.ssh" ]; then
  echo "Creando el directorio $HOME/.ssh"
  mkdir -p "$HOME/.ssh"
  chmod 700 "$HOME/.ssh"
fi

# ----------------------------------------------------------------------
# Comprobar si el archivo es una clave privada
# ----------------------------------------------------------------------

if head -n 1 "$FICHERO_CLAVE" | grep -q "BEGIN OPENSSH PRIVATE KEY"; then
  # Si es una clave privada, la instalamos como id_rsa
  echo "Instalando clave privada en $HOME/.ssh/id_rsa"
  cp "$FICHERO_CLAVE" "$HOME/.ssh/id_rsa"
  chmod 600 "$HOME/.ssh/id_rsa"
  echo "Clave privada instalada correctamente."

# ----------------------------------------------------------------------
# Comprobar si el archivo es una clave pública
# ----------------------------------------------------------------------

elif head -n 1 "$FICHERO_CLAVE" | grep -q "^ssh-"; then
  # Si es una clave pública, la agregamos al archivo authorized_keys
  echo "Agregando clave pública a $HOME/.ssh/authorized_keys"
  
  # Verificar si el archivo authorized_keys existe
  if [ ! -f "$HOME/.ssh/authorized_keys" ]; then
    touch "$HOME/.ssh/authorized_keys"
    chmod 600 "$HOME/.ssh/authorized_keys"
  fi

  # Agregar la clave pública al archivo authorized_keys
  cat "$FICHERO_CLAVE" >> "$HOME/.ssh/authorized_keys"
  chmod 600 "$HOME/.ssh/authorized_keys"
  echo "Clave pública agregada correctamente."

else
  echo "El archivo no es una clave SSH válida (ni privada ni pública)."
  exit 3
fi
