Блог ИТ склеротика. Автоматизируем создание VPN пользователей в PFSense

Страницы

Расширенный поиск в статьях блога

4 марта 2012 г.

Автоматизируем создание VPN пользователей в PFSense


image
Мне очень нравится PFSense 2.0. Особенно хороша у него стала функция OpenVPN сервера. Сам сервер настраивается в несколько кликов ( www.youtube.com/watch?v=odjviG-KDq8 ). После этого остается только создать пользователей и выслать им архив с настройками. Но когда передо мной встала задача перенести 70 пользователей из ClearOS в PFSense, я честно говоря приуныл. Перспектива рисовалась следующая. Зайти в «User Manager», щелкнуть кнопку добавления пользователя, ввести логин, ввести пароль, еще раз ввести пароль, вести фамилию и имя, отметить чекбокс «Click to create a user certificate», снова вести фамилию и имя, щелкнуть кнопку «Сохранить», перейти в «OpenVPN Server» вкладку «Client Export», сохранить архив с настройками, создать письмо, вставить туда email, написать логин, пароль, вложить архив с настройками, написать сопроводительный текст и отправить. И так 70 раз!!! Конечно если задаться целью и отключить мозг, все это можно сделать за день, а то и меньше. Но я от тупой работы либо засыпаю, либо прихожу в бешенство. Поэтому решено было сей процесс автоматизировать. И тут уныние, теперь уже переходящее в отчаяние, настигло меня во второй раз. Потому что PFSense на мои попытки переписать его потроха отвечал Read-only file system, а выполнить задуманное через config.xml мне не позволяло знание его структуры (и я подозреваю, что его средствами это невозможно). То есть на горизонте мрачно маячили либо нервное засыпание, либо покусание близ находящихся особей гуманоидного типа. Но выход был найден. Если выполнять работу самому не хочется, нужно написать скрипт, который будет нажимать на кнопки вместо тебя. Я уже вижу лес рук пользователей Windows которые нетерпеливо выкрикивают: «AutoIt, AutoIt!». Простите великодушно, я не описал полной картины. Я работаю из под Ubuntu. Ага. Лес рук сильно поредел. Осталась только пара, тройка. Ну давай, вот ты, мальчик в свитере с отчаянно пробивающейся бородой. Как, как? Правильно. Садись, пять. Xdotools, друзья. Вот тот самый мужик в синем трико с буквой S на груди, который спас мое отчаянное положение.


Условия работы.
Экран должен быть разблокирован.
Должен быть установлен браузер Google Chrome. В других не испытывалось.
Админку PFSense нужно хотя бы раз открыть. Скрипт не будет вводить имя и пароль на вход, хотя поначалу такая задумка была.
Система Ubuntu 11.04 Desktop. На других не проверялось.
Должен быть установлен пакет xdotools и sendemail.
Формат списка пользователей должен быть следующим:
login first_name second_name
Например:
S_Astapov Sergey Astapov

Логин должен совпадать с email адресом.

Ниже код (Умоляю, не стреляйте в меня табуретками. Я не программер. По сему код не претендует на изящество и соблюдение программистских догм и правил).

#!/bin/bash 

#Путь к файлу со списком пользователей 
bdpath=/opt/automa 

#Файл со списком пользователей 
bdusers=(`cat $bdpath/users.txt`) 

#Удаляем нечитаемый символ в начале первой переменной. Не знаю откуда он берется. 
fs=(`echo ${bdusers[0]} | sed -e 's/^.[a-zA-Z]\{0\}//'`) 

#Задаем значение переменных 
a=0 
b=`expr $a + 1` 
c=`expr $b + 1` 

#Присваеваем первой переменной нормальное значение. 
bdusers[0]=$fs 

#Команды перемещения по странице 
tab="xdotool key --delay 300 "Tab"" 
shifttab="xdotool key --delay 300 --clearmodifiers "Shift+Tab"" 

#Начинаем цикл 
while [ ${bdusers[$a]} ] 
do 

# Можно использовать для подстраховки на случай если  скрипт ошибется. 
#echo "All is right?" && read 

#Открываем страницу добавления пользователей 
/usr/bin/google-chrome - https://pfsense.loc/system_usermanager.php?act=new 

sleep 3

#Задаем значение переменных 
name1="${bdusers[$c]}" 
name2="${bdusers[$b]}" 
login="${bdusers[$a]}" 
pass=`pwgen -1n`

#Заполняем реквизиты пользователя
#Переходим в поле Username
i=0
while [ "$i" != "9" ]
do
$tab
i=`expr $i + 1`
done

#Вводим логин
xdotool type $login

#Переходим в поле Password
xdotool key --delay 200 "Tab"

#Вводим пароль
xdotool type $pass
xdotool key --delay 200 "Tab"
xdotool type $pass

#Переходим в поле Full Name
xdotool key --delay 200 "Tab"

#Вводим фамилию
xdotool type $name1

#через пробел
xdotool key space

#Вводим имя
xdotool type $name2

#Переходим на чекбокс Click to create a user certificate.
i=0
while [ "$i" != "7" ]
do
$tab
i=`expr $i + 1`
done

#Отмечаем чекбокс Click to create a user certificate. 
xdotool key space

#Переходим вполе Descriptive name
xdotool key --delay 30 "Tab"

#Вводим фамилию
xdotool type $name1

#через пробел
xdotool key space

#Вводим имя
xdotool type $name2

#Переходим на кнопку Save
i=0
while [ "$i" != "6" ]
do
$tab
i=`expr $i + 1`
done

#Жмем кнопку Save
xdotool key "Return"

#Закрываем страницу
xdotool key "Ctrl+w" 


#Открываем страницу экспорта настроек
/usr/bin/google-chrome — https://pfsense.loc/vpn_openvpn_export.php
sleep 3

#Переходим на  архив настроек последнего пользователя
i=0
while [ "$i" != "6" ]
do
$shifttab
i=`expr $i + 1`
done

#Инициируем сохранение архива
xdotool key "Return"

sleep 2

#Вводим путь /home/user/temp/ куда сохранить файл и имя файла
xdotool key slash
xdotool type "home"
xdotool key slash
xdotool type "user"
xdotool key slash
xdotool type "temp"
xdotool key slash
xdotool type "vpn-TCP-1194-config"

#Нажимаем Enter
xdotool key "Return"

sleep 3

#Закрываем страницу
xdotool key "Ctrl+w"

#Отправляем пользователю письмо с именем, паролем и архивом настроек
sendemail -f admin@company.ru  -t $login@company.ru -o message-charset=utf-8 -o message-content-type=html -u "NewVPN Settings" -m "<p>Уважаемые коллеги.
 Изменились настройки VPN сервера. Для применения новых настроек читайте инструкцию  в приложении к письму.</p><p>name - $login 
 pass - $pass"\
 -s mail.company.ru -xu admin@company.ru -xp password -a instruction.doc /home/user/temp/vpn-TCP-1194-config.zip

#Удаляем архив настроек
rm /home/user/temp/vpn-TCP-1194-config.zip

a=`expr $a + 3`
b=`expr $b + 3`
c=`expr $c + 3`

done


Искушенные читатели могут спросить: «А почему при задании имени файла не вписывается расширение?» И я отвечу — потому что при сохранении архива (по крайней мере у меня), выделение автоматически устанавливается только на имя файла. И при прописывании пути и имени, расширение остается неизменным.


Настоятельно рекомендую на время проверки раскомментировать строчку echo «All is right?» && read или делать паузы подлиннее, секунд 10-15.
Ну, вот и все. Искренне надеюсь, что скрипт поможет попавшим в мою ситуацию. Ну и напоследок видео. Как оно в живую.

.

Счетчик тИЦ и PR Яндекс.Метрика Msn bot last visit powered by MyPagerank.NetYahoo bot last visit powered by MyPagerank.Net ping fast  my blog, website, or RSS feed for Free