source: server/bin/setsslkey @ 21d51f5

918-git-images-111dmainopengnsys-1.1.1dpreqndtest
Last change on this file since 21d51f5 was 8645a4a, checked in by Irina Gómez <irinagomez@…>, 5 years ago

#929 setsslkey: Script for configurate public key authentication in ogLive.

  • Property mode set to 100755
File size: 4.0 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
25# Control básico de errores.
26if [ "$USER" != "root" ]; then
27    echo "$PROG: Error: solo ejecutable por root" >&2
28    exit 1
29fi
30
31# Regenerar las claves públicas aunque existan
32[ "${1^^}" == "NEW" ] && NEWKEY="NEW" && shift
33
34case $# in
35    0)  # Cambios en todos los clientes ogLive instalados.
36        if which oglivecli &>/dev/null; then
37            LIST=$(oglivecli list | awk '{print $2}')
38        else
39            LIST="ogclient"
40        fi ;;
41    1)  # Cambios en único ogLive (AVISO: puede crear inconsistencias con otros ogLive).
42        LIST="$1" ;;
43    *)  # Error de formato.
44        echo "$PROG: Error de ejecución" >&2
45        echo "Formato: $PROG ogLive"
46        exit 1 ;;
47esac
48
49# Si me salgo con error borro el directorio temporal
50trap "rm -rf $TMPDIR 2>/dev/null" 1 2 3 6 9 15
51
52# ogLive por defecto
53OGLIVEDEFAULT=$(oglivecli list |awk -v NUM=$(oglivecli get-default) '{if ($1 == NUM) print $2}')
54
55if [ "$NEWKEY" != "NEW" ]; then 
56    # Comprobamos si el ogLive por defecto contiene la clave
57    CLIENTINITRD="$TFTPDIR/$OGLIVEDEFAULT/$INITRD"
58    if [ -r "$CLIENTINITRD" ]; then
59        mkdir -p $TMPDIR
60        cd $TMPDIR || exit 3
61        gzip -dc "$CLIENTINITRD" | cpio -im
62        if [ -r scripts/ssl/id_rsa ]; then
63            PRIVKEY=$(cat scripts/ssl/id_rsa |grep -v '\-\-\-')
64            PUBLICKEY=$(cat scripts/ssl/id_rsa.pub)
65        else
66            NEWKEY="NEW"
67        fi
68        rm -fr $TMPDIR
69    else
70        NEWKEY="NEW"
71    fi
72fi
73
74# Genero nueva clave
75if [ "$NEWKEY" == "NEW" ]; then
76    [ -d $TMPDIR ] && rm -rf $TMPDIR
77    mkdir $TMPDIR
78    ssh-keygen -N "" -f $TMPDIR/id_rsa
79    PRIVKEY=$(cat $TMPDIR/id_rsa |grep -v "\-\-\-")
80    PUBLICKEY=$(cat $TMPDIR/id_rsa.pub)
81    rm -rf $TMPDIR
82fi
83
84# Buscar todos los clients ogLive instalados.
85for OGLIVE in $LIST; do
86    # Si no hay generar nueva clave ssl no hay que modificar el ogLive por defecto
87    [ "$NEWKEY" != "NEW" ] && [ "$OGLIVE" == "$OGLIVEDEFAULT" ] && continue
88
89    # Crear clave para usuario de acceso a los recursos.
90    CLIENTINITRD="$TFTPDIR/$OGLIVE/$INITRD"
91    if [ -r "$CLIENTINITRD" ]; then
92        # Editar la parte de acceso del cliente:
93        #    descomprimir Initrd, sustituir clave y recomprimir Initrd).
94        echo "Configurando cliente \"$OGLIVE\" ..."
95        mkdir -p $TMPDIR
96        cd $TMPDIR || exit 3
97        gzip -dc "$CLIENTINITRD" | cpio -im
98
99        # Genero archivos de claves
100        [ -d $TMPDIR/scripts/ssl ] || mkdir -p $TMPDIR/scripts/ssl
101
102        echo "-----BEGIN RSA PRIVATE KEY-----" > $TMPDIR/scripts/ssl/id_rsa
103        echo $PRIVKEY |sed s/" "/\\n/g >> $TMPDIR/scripts/ssl/id_rsa
104        echo "-----END RSA PRIVATE KEY-----" >> $TMPDIR/scripts/ssl/id_rsa
105
106        echo $PUBLICKEY > $TMPDIR/scripts/ssl/id_rsa.pub
107        echo $PUBLICKEY > $TMPDIR/scripts/ssl/authorized_keys
108
109        chmod 400 $TMPDIR/scripts/ssl/id_rsa
110        chmod 400 $TMPDIR/scripts/ssl/authorized_keys
111
112        # Generar Initrd del cliente.
113        find . | cpio -H newc -oa | gzip -9c > "$CLIENTINITRD"
114
115        rm -fr $TMPDIR
116        # Calcular suma de comprobación.
117        md5sum "$CLIENTINITRD" | cut -f1 -d" " > "$CLIENTINITRD.sum"
118        let CHANGES++
119    else
120        echo "$PROG: Cliente \"$OGLIVE\" no accesible."
121    fi
122done
123if [[ $CHANGES != 0 ]]; then
124    echo "$PROG: Se ha modificado la pareja de claves ssl en $CHANGES clientes."
125else
126    echo "$PROG: Aviso: no se ha modificado la clave de ningún cliente."
127fi
Note: See TracBrowser for help on using the repository browser.