source: server/bin/setsslkey

lgromero-new-oglive
Last change on this file was c28eefa, checked in by Natalia Serrano <natalia.serrano@…>, 19 months ago

Log to syslog in a number of shell scripts

  • Property mode set to 100755
File size: 4.2 KB
Line 
1#!/bin/bash
2
3#/**
4#         setsslkey
5#@file    setsslkey [NEW] [ogLive]
6#@brief   Configura las claves públicas en los ogLive para que puedan autenticarse entre ellos.
7#@param   $1 crear_key [NEW] (opcional). Crear la pareja de claves ssl. Por defecto toma la del oglive por defecto.
8#@param   $2 ogLive (opcional). ogLive al que se le incluyen las claves públicas, por defecto a todos.
9#@warning Se modifica el Initrd del cliente.
10#@version 1.1.2 - Versión inicial - Basado en setserveraddr
11#@author  Irina Gómez - ETSII Universidad Sevilla
12#@date    2019-09-25
13#*/ ##
14
15
16# Variables.
17PROG=$(basename "$0")
18PATH=$PATH:$(dirname "$(realpath "$0")")
19OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
20TFTPDIR=$OPENGNSYS/tftpboot
21INITRD=oginitrd.img
22TMPDIR=/tmp/oglive$$
23let CHANGES=0
24
25source $OPENGNSYS/lib/ogfunctions.sh
26
27# Control básico de errores.
28if [ "$USER" != "root" ]; then
29    echo "$PROG: Error: solo ejecutable por root" >&2
30    exit 1
31fi
32
33# Regenerar las claves públicas aunque existan
34[ "${1^^}" == "NEW" ] && NEWKEY="NEW" && shift
35
36case $# in
37    0)  # Cambios en todos los clientes ogLive instalados.
38        if which oglivecli &>/dev/null; then
39            LIST=$(oglivecli list | awk '{print $2}')
40        else
41            LIST="ogclient"
42        fi ;;
43    1)  # Cambios en único ogLive (AVISO: puede crear inconsistencias con otros ogLive).
44        LIST="$1" ;;
45    *)  # Error de formato.
46        echo "$PROG: Error de ejecución" >&2
47        echo "Formato: $PROG ogLive"
48        exit 1 ;;
49esac
50
51# Si me salgo con error borro el directorio temporal
52trap "rm -rf $TMPDIR 2>/dev/null" 1 2 3 6 9 15
53
54# ogLive por defecto
55OGLIVEDEFAULT=$(oglivecli list |awk -v NUM=$(oglivecli get-default) '{if ($1 == NUM) print $2}')
56
57if [ "$NEWKEY" != "NEW" ]; then
58    # Comprobamos si el ogLive por defecto contiene la clave
59    CLIENTINITRD="$TFTPDIR/$OGLIVEDEFAULT/$INITRD"
60    if [ -r "$CLIENTINITRD" ]; then
61        mkdir -p $TMPDIR
62        cd $TMPDIR || exit 3
63        COMPRESS=$(file -b "$CLIENTINITRD" | awk '{print tolower($1);}')
64        $COMPRESS -dc "$CLIENTINITRD" | cpio -im
65        if [ -r scripts/ssl/id_rsa ]; then
66            PRIVKEY=$(cat scripts/ssl/id_rsa |grep -v '\-\-\-')
67            PUBLICKEY=$(cat scripts/ssl/id_rsa.pub)
68        else
69            NEWKEY="NEW"
70        fi
71        rm -fr $TMPDIR
72    else
73        NEWKEY="NEW"
74    fi
75fi
76
77# Genero nueva clave
78if [ "$NEWKEY" == "NEW" ]; then
79    [ -d $TMPDIR ] && rm -rf $TMPDIR
80    mkdir $TMPDIR
81    ssh-keygen -N "" -f $TMPDIR/id_rsa
82    PRIVKEY=$(cat $TMPDIR/id_rsa |grep -v "\-\-\-")
83    PUBLICKEY=$(cat $TMPDIR/id_rsa.pub)
84    rm -rf $TMPDIR
85fi
86
87# Buscar todos los clients ogLive instalados.
88for OGLIVE in $LIST; do
89    # Si no hay generar nueva clave ssl no hay que modificar el ogLive por defecto
90    [ "$NEWKEY" != "NEW" ] && [ "$OGLIVE" == "$OGLIVEDEFAULT" ] && continue
91
92    # Crear clave para usuario de acceso a los recursos.
93    CLIENTINITRD="$TFTPDIR/$OGLIVE/$INITRD"
94    if [ -r "$CLIENTINITRD" ]; then
95        # Editar la parte de acceso del cliente:
96        #    descomprimir Initrd, sustituir clave y recomprimir Initrd).
97        echolog "Configurando cliente \"$OGLIVE\" ..."
98        mkdir -p $TMPDIR
99        cd $TMPDIR || exit 3
100        COMPRESS=$(file -b "$CLIENTINITRD" | awk '{print tolower($1);}')
101        $COMPRESS -dc "$CLIENTINITRD" | cpio -im
102
103        # Genero archivos de claves
104        [ -d $TMPDIR/scripts/ssl ] || mkdir -p $TMPDIR/scripts/ssl
105
106        echo "-----BEGIN RSA PRIVATE KEY-----" > $TMPDIR/scripts/ssl/id_rsa
107        echo $PRIVKEY |sed s/" "/\\n/g >> $TMPDIR/scripts/ssl/id_rsa
108        echo "-----END RSA PRIVATE KEY-----" >> $TMPDIR/scripts/ssl/id_rsa
109
110        echo $PUBLICKEY > $TMPDIR/scripts/ssl/id_rsa.pub
111        echo $PUBLICKEY > $TMPDIR/scripts/ssl/authorized_keys
112
113        chmod 400 $TMPDIR/scripts/ssl/id_rsa
114        chmod 400 $TMPDIR/scripts/ssl/authorized_keys
115
116        # Generar Initrd del cliente.
117        find . | cpio -H newc -oa | gzip -9c > "$CLIENTINITRD"
118
119        rm -fr $TMPDIR
120        # Calcular suma de comprobación.
121        md5sum "$CLIENTINITRD" | cut -f1 -d" " > "$CLIENTINITRD.sum"
122        let CHANGES++
123    else
124        echolog "$PROG: Cliente \"$OGLIVE\" no accesible."
125    fi
126done
127if [[ $CHANGES != 0 ]]; then
128    echolog "$PROG: Se ha modificado la pareja de claves ssl en $CHANGES clientes."
129else
130    echolog "$PROG: Aviso: no se ha modificado la clave de ningún cliente."
131fi
Note: See TracBrowser for help on using the repository browser.