OpenVPN: как создать много клиентских конфигов

Jul 02, 2016 18:24

Любой админ, получая новую задачу с кучей однотипных действий, сталкивается с выбором: либо сделать это вручную, медленно и нудно, но зато гарантированно, либо автоматизировать, но затратить неизвестно сколько времени и, возможно, не достичь результата к сроку, да еще и нагоняй от начальства получить. Каждый выбирает своё, в зависимости от опыта и решимости.

Вот и мне такое досталось: либо потратить 2 дня на формирование 200 клиентских конфигов для OpenVPN, либо написать скрипт. Я крепко задумалась. С одной стороны, текущие задачи никто не отменял, поэтому когда тут изучать баш и писать скрипты, а с другой... Админ я, в конце-то концов, или нет?! Зря, что ли, меня учили такие крутые люди, как klink0v, hvostat_hvostat, и  rustedowl?

Поэтому в один из дней я пришла пораньше, погуглила, увидела, что никто прямо такую задачу скриптом еще не решал, почитала чужие скрипты, подумала и написала-таки скрипт, который построчно читает из текстового файлика имя клиента, генерирует для него ключи, создает в указанном месте папку с именем клиента, складывает туда ключи, сертификаты и создает файл конфига.
Остается только положить эту папочку на клиента, и всё!

Конечно, это совсем простой скрипт, как я сейчас понимаю, тем более, это было не прямо-таки "с нуля", но это мой первый скрипт на баше и я страшно горжусь тем, что человек разумный во мне в этот момент восторжествовал над человеком ленивым.))

P.S.: да, скрипт еще не до конца причёсан и не очень хорошо прокомментирован, но я это потом доведу до ума. =)


 #!/bin/bash
OPENVPN_DIR=/etc/openvpn
OPENVPN_RSA_DIR=$OPENVPN_DIR/easy-rsa
OPENVPN_KEYS=$OPENVPN_RSA_DIR/keys
KEY_DOWNLOAD_PATH=/mnt/share/
SRC_CONF=client

echo 'START create configs!!'
source ./vars

while IFS='' read -r line || [[ -n "$line" ]]; do
    # Read line from file
    cd $OPENVPN_RSA_DIR
    echo "MAKE config for $line:"

# Check the CN doesn't already exist
    if [ -f $OPENVPN_KEYS/$CN.crt ]
    then
    echo "Error: certificate with the CN $CN already exists!"
    else
        # Build clients key
    export EASY_RSA="${EASY_RSA:-.}"
    "$EASY_RSA/pkitool" --batch $line

if [ ! -d  $KEY_DOWNLOAD_PATH/$line/ ]
        then
        # Create new client directory and copy keys/certs
        mkdir $KEY_DOWNLOAD_PATH/$line
        mkdir $KEY_DOWNLOAD_PATH/$line/keys
        echo 'Create distant folders...'
        /bin/cp $OPENVPN_KEYS/$line.{key,crt} $KEY_DOWNLOAD_PATH/$line/keys
        echo 'Copying the certificates...'
        else
            /bin/cp $OPENVPN_KEYS/$line.{key,crt} $KEY_DOWNLOAD_PATH/$line/keys
        fi
        # Build ovpn profile using newly generated client key/cert and ca.crt
        /bin/cp $OPENVPN_DIR/$SRC_CONF.conf $KEY_DOWNLOAD_PATH/$line/client.conf
        /bin/cp $OPENVPN_KEYS/ca.crt $KEY_DOWNLOAD_PATH/$line/keys/ca.crt
        /bin/cp $OPENVPN_KEYS/ta.key $KEY_DOWNLOAD_PATH/$line/keys/ta.key
    echo 'Copying ca.crt, ta.key and client.conf...' 
    # Create custom config
        /bin/echo "cert /etc/openvpn/keys/$line.crt" >> $KEY_DOWNLOAD_PATH/$line/client.conf
        /bin/echo "key /etc/openvpn/keys/$line.key" >> $KEY_DOWNLOAD_PATH/$line/client.conf
        echo 'Customizing config...'
    fi
echo ''
done < "$1"

it-шное, howto, за что я люблю этот мир, учусь, админские будни

Previous post Next post
Up