Dlink Empty Script

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску

Настройка большого числа коммутаторов

В связи с тем, что было принято решение делать еже(дневно|недельно|годично) бекапы коммутаторов, возникла необходимость каким-то образом прописать на них коммюнити. Обходить руками все коммутаторы не хотелось. Задача усложнялась тем, что часть коммутаторов уже использовали централизованную авторизацию через радиус, а часть - старую схему с авторизацией из локальной базы пользователей.

Выбор средств

Существует 2 хорошо известных программы для решения данной задачи

Т.к. expect был у меня не собран, и предлогал поставить множество зависимостей, я решил использовать empty. Тем более, что написание скриптов на bash с использованием empty мне показалось значительно проще.

Краткое описание скриптов

Для того что бы пройтись по всем коммутаторам и внести на них изменения, я написал следующий скрипт: (разбито на части для лучшего понимания)

Описание переменных

#!/bin/bash

PWGEN=`which pwgen`
EMPTY=`which empty`
LOG_FILE="/var/log/des_empty.log"
SQL_LOG="/var/log/des_sql.log"


USERNAME_RADIUS='radiususer'
PASSWORD_RADIUS='password_in_radius'
USERNAME_LOCAL='local_user'
PASSWORD_LOCAL='local_password'
PASSWORD_ENABLE='enable_password'
IP_LIST='ip_list'

Есть 2 пользователя (из радиуса и локальный) с которыми можно авторизоваться на коммутаторе.В случае локальной авотризации сразу попадаешь в привилигированный режим. В случае авторизации через радиус требуется дополнительно выполнить комманду

enable admin

Полезная работа

Собственно полезную работу вынесу в отдельную ф-ю - то, что нужно сделать с коммутатором после авторизации. Тут может быть что угодно, я оставил для пример добавления случайной RW коммюнити.. 30-секундная пауза что бы коммутатор успел сохранить настройки.

Возможно, следует проверять успешность сохранения, но в моей практике сбоев на этом этапе не было.

function load_data
{
    RW_COMMUNITY=`$PWGEN -1`
    echo 'create snmp view ALL 1 view_type included' | $EMPTY -v  -s  -i $OUT_FIFO -o $IN_FIFO
    echo 'create snmp community '$RW_COMMUNITY'  view ALL read_write' | $EMPTY -v  -s  -i $OUT_FIFO -o $IN_FIFO
    echo UPDATE switch set rw_community=\"$RW_COMMUNITY\", is_backup=1 where ip=\"$IP\" >> $SQL_LOG
    $EMPTY -v -s  -i $OUT_FIFO -o $IN_FIFO -t 5 'save\n'
    sleep 30
    $EMPTY -v -s  -i $OUT_FIFO -o $IN_FIFO -t 5 'logout\n'
}


333

444