Молния А что в логах сервера и клиента во время невозможности переподключения? Если там нет ничего интересного - увеличьте параметр verbДобавление от 27.06.2007 05:57: islink Вот скрипт аутентификации auth.vbs. Использование:
В конфиге клиента указать: auth-user-pass
В конфиге сервера указать: auth-user-pass-verify "auth.vbs" via-file У процесса openvpn.exe должно хватать прав для создания временного файла в текущем каталоге, скорее всего это будет "c:\Program Files\OpenVPN\config"
Вероятнее всего там же, в "c:\Program Files\OpenVPN\config" надо положить файл users.pw (если не там или иное имя - изменить это в скрипте). Файл состоит из требуемого количества пар строк: имя пароль Между этими парами пустые строки (именно абсолютно пустые) игнорируются. Например:
код
user01 pass01 user02 pass02
TEST-client01 1
example_of_user_with_blank_password
user03 pass03
Вот сам скрипт auth.vbs:
код (во всю высоту: 55 строк)
'VBscript auth.vbs для аутентификации в OpenVPN - auth-user-pass-verify auth.vbs via-file '(c) 2007 vinni http://forum.ixbt.com/users.cgi?id=info:vinni 'Support: http://forum.ixbt.com/topic.cgi?id=14:40906#1
' в скрипте производится сравнение имени пользователя без учёта регистра. ' Если нужно иначе - уберите UCase(...) в 2 или 4 местах
On Error Resume Next
' открываем файл, имя которого передано OpenVPN-ом в скрипт через параметр Set fso = CreateObject("scripting.filesystemobject") Set CurrentUserPasswordFile = fso.OpenTextFile(WScript.Arguments(0),1) '1 = for reading if Err.Number<>0 Then WScript.Quit(1)
' читаем из этого файла 2 строки - имя и пароль, которые ввёл пользователь "на том конце" if CurrentUserPasswordFile.AtEndOfStream then WScript.Quit(1) UserName=CurrentUserPasswordFile.ReadLine if CurrentUserPasswordFile.AtEndOfStream then WScript.Quit(1) Password=CurrentUserPasswordFile.ReadLine CurrentUserPasswordFile.Close
' открываем переменную окружения common_name (это CN предъявленного клиентом сертификата) ' и сравниваем её с введенным именем пользователя. ' если это сравнение не нужно, то следующие 2 строки удалить или закомменировать CurrentCommonName = CreateObject("Wscript.Shell").ExpandEnvironmentStrings("%common_name%") if UCase(CurrentCommonName) <> UCase(UserName) then WScript.Quit(1)
' открываем наш файл с базой логинов и паролей ' по умолчанию это Users.pw в текущем каталоге Set UserPasswordFileBase = fso.OpenTextFile("Users.pw",1) '1 = for reading if Err.Number<>0 Then WScript.Quit(1)
' читаем в цикле пары строк, пропуская пустые МЕЖДУ ЭТИМИ ПАРАМИ, ' и сравниваем их с тем, что ввёл пользователь. Do while not(UserPasswordFileBase.AtEndOfStream) NextUserName=UserPasswordFileBase.ReadLine if Err.Number<>0 Then WScript.Quit(1) if NextUserName<>"" then ' если имя пользователя надо сравнивать с учётом регистра, то удалите здесь UCase(...) if UCase(UserName)=UCase(NextUserName) then if Password=UserPasswordFileBase.ReadLine then ' если имя и пароль совпали с парой из базы, то завершаем скрипт с результатом 0 ' так нужно для OpenVPN'a, это признак успешной аутентификации UserPasswordFileBase.Close WScript.Quit(0) end if else UserPasswordFileBase.ReadLine end if end if Loop
' если поиск завершился безуспешно, то завершаем скрипт с результатом 1 ' так нужно для OpenVPN'a, это признак НЕуспешной аутентификации UserPasswordFileBase.Close WScript.Quit(1) |
Комментариев нет:
Отправить комментарий