Для создания инсталляционных пакетов для большого числа пользователей в рамках единой процедуры предлагается использовать сценарии PowerShell, вызывающие в цикле утилиту make_inst.exe. Далее описаны несколько типичных сценариев. На компьютере администратора должна быть создана специальная папка для файлов пользователей. В этой папке создаются подпапки, которые называются по имени пользователей. Например, папка c:\vpn_client, в ней подпапки c:\vpn_client\alice и c:\vpn_client\bob (важно, чтобы не было посторонних подпапок). В этих подпапках лежит файл localcert.cer, а также для некоторых сценариев могут лежать файлы ca.cer, lsp.txt и pwd.txt (пароль на контейнер).
Сценарии пишутся в виде текстового файла с расширением ps1, например, make_clients.ps1. Запускаются из консоли PowerShell, например: c:\make_clients\make_clients.ps1.
Обычно по умолчанию запрещен вызов неподписанных сценариев. Можно разрешить запуск любых сценариев из текущей консоли, не затрагивая системных настроек: Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process.
Сценарий 1. В этом сценарии контейнеры с секретными ключами пользователей имеют пустой пароль. Получаемые SFX-файлы кладутся в папки пользователей под именем <Имя_папки>.exe. В папках пользователей лежат локальные сертификаты. Используется один CA сертификат и одна LSP для всех пользователей:
$MAKE_INST_PATH = 'c:\Program Files (x86)\S-Terra Client AdminTool st\make_inst.exe'
$TEMPLATE_DIR = 'c:\vpn_client'
$CONTAINER_NAME = 'file_p15://container'
$LSP_PATH = "$TEMPLATE_DIR\lsp.txt"
$CA_PATH = "$TEMPLATE_DIR\ca.cer"
$pkg_count = 0
Get-ChildItem $TEMPLATE_DIR -Directory | ForEach-Object {
Write-Output "Сборка пакета $_"
$curr_full_name = $_.FullName
$process = Start-Process -PassThru -NoNewWindow -Wait -FilePath $MAKE_INST_PATH -ArgumentList "-o `"$curr_full_name\$_.exe`" -c `"$CA_PATH`" -u `"$curr_full_name\localcert.cer`" -uc $CONTAINER_NAME -l `"$LSP_PATH`" -q normal"
if ( $process.ExitCode -ne 0 ) {
Write-Error "Ошибка при сборке пакета $_"
Exit 1
}
Write-Output "Пакет $_ успешно собран"
Write-Output "==================="
$pkg_count += 1
}
Write-Output "Собрано пакетов: $pkg_count"
Используются следующие настройки:
TEMPLATE_DIR – папка, в которой лежат подпапки пользователей. Путь должен быть без пробелов.
MAKE_INST_PATH – путь к утилите make_inst.exe.
CONTAINER_NAME – имя контейнера.
LSP_PATH – путь к общей LSP.
CA_PATH – путь к общему CA сертификату.
Здесь и далее:
· в успешной ситуации выдается сообщение вида «Собрано пакетов: <n>»,
· при ошибке выдается сообщение об ошибке, выполнение сценария прерывается.
Сценарий 2. Используется общий пароль для всех контейнеров с секретными ключами всех пользователей. Получаемые SFX-файлы кладутся в папки пользователей под именем <Имя_папки>.exe. Каждый пользователь имеет свой CA сертификат и своя LSP. Получаемые файлы кладутся в одну папку:
$MAKE_INST_PATH = 'c:\Program Files (x86)\S-Terra Client AdminTool st\make_inst.exe'
$TEMPLATE_DIR = 'c:\vpn_client'
$CONTAINER_NAME = 'file_p15://container'
$CONTAINER_PASSWORD = 'somepwd'
$SFX_DIR = 'c:\sfx'
$pkg_count = 0
Get-ChildItem $TEMPLATE_DIR -Directory | ForEach-Object {
Write-Output "Сборка пакета $_"
$curr_full_name = $_.FullName
$process = Start-Process -PassThru -NoNewWindow -Wait -FilePath $MAKE_INST_PATH -ArgumentList "-o `"$SFX_DIR\$_.exe`" -c `"$curr_full_name\ca.cer`" -u `"$curr_full_name\localcert.cer`" -uc $CONTAINER_NAME -l `"$curr_full_name\lsp.txt`" -up `"$CONTAINER_PASSWORD`" -q normal"
if ( $process.ExitCode -ne 0 ) {
Write-Error "Ошибка при сборке пакета $_"
Exit 1
}
Write-Output "Пакет $_ успешно собран"
Write-Output "==================="
$pkg_count += 1
}
Write-Output "Собрано пакетов: $pkg_count"
Новые настройки:
CONTAINER_PASSWORD – общий пароль
SFX_DIR – папка, в которую кладутся получаемые файлы.
Сценарий 3. Все условия аналогичны сценарию 2, но получаемые файлы кладутся в одну папку с именами <username.exe> (где <username> совпадает с именем пользовательской подпапки, например alice.exe или bob.exe). Также в каждой пользовательской папке дополнительно лежит файл pwd.txt, содержащий пароль контейнера для данного пользователя. Кроме того, агент должен ставиться в папку c:\my vpn (с пробелом):
$MAKE_INST_PATH = 'c:\Program Files (x86)\S-Terra Client AdminTool st\make_inst.exe'
$TEMPLATE_DIR = 'c:\vpn_client'
$CONTAINER_NAME = 'file_p15://container'
$SFX_DIR = 'c:\sfx'
$pkg_count = 0
Get-ChildItem $TEMPLATE_DIR -Directory | ForEach-Object {
Write-Output "Сборка пакета $_"
$curr_full_name = $_.FullName
$process = Start-Process -PassThru -NoNewWindow -Wait -FilePath $MAKE_INST_PATH -ArgumentList "-o `"$SFX_DIR\$_.exe`" -c `"$curr_full_name\ca.cer`" -u `"$curr_full_name\localcert.cer`" -uc $CONTAINER_NAME -l `"$curr_full_name\lsp.txt`" -ufp `"$curr_full_name\pwd.txt`" -a `"INSTALLDIR=\`"c:\my vpn\`"`" -q normal"
if ( $process.ExitCode -ne 0 ) {
Write-Error "Ошибка при сборке пакета $_"
Exit 1
}
Write-Output "Пакет $_ успешно собран"
Write-Output "==================="
$pkg_count += 1
}
Write-Output "Собрано пакетов: $pkg_count"
Здесь
SFX_DIR – папка, в которую размещаются получаемые файлы.
Сценарий 4. На компьютере администратора присутствуют контейнеры с именами, совпадающими с именами пользовательских папок (например, file_p15://alice и file_p15://bob). Пароли на контейнеры на компьютере администратора совпадают с паролями на компьютере пользователя. Контейнеры переносятся с компьютера администратора на компьютер пользователя через инсталляционный пакет. В каждой пользовательской папке присутствует файл transport_pwd.txt с транспортным паролем, который нужно ввести при установке пакета. (Примечание: транспортный пароль не должен совпадать с основным паролем.) Также в пользовательской папке присутствует файл с лицензией lic.txt.
$MAKE_INST_PATH = 'c:\Program Files (x86)\S-Terra Client AdminTool st\make_inst.exe'
$TEMPLATE_DIR = 'c:\vpn_client'
$CONTAINER_NAME = 'file_p15://container'
$SFX_DIR = 'c:\sfx'
$pkg_count = 0
Get-ChildItem $TEMPLATE_DIR -Directory | ForEach-Object {
Write-Output "Сборка пакета $_"
$curr_full_name = $_.FullName
$process = Start-Process -PassThru -NoNewWindow -Wait -FilePath $MAKE_INST_PATH -ArgumentList "-o `"$SFX_DIR\$_.exe`" -c `"$curr_full_name\ca.cer`" -u `"$curr_full_name\localcert.cer`" -uc $CONTAINER_NAME -l `"$curr_full_name\lsp.txt`" -ufp `"$curr_full_name\pwd.txt`" -lic `"$curr_full_name\lic.txt`" -uac `"file_p15://$_`" -uafp `"$curr_full_name\pwd.txt`" -uaftp `"$curr_full_name\transport_pwd.txt`" -ucpkgcopy on -chksecret on"
if ( $process.ExitCode -ne 0 ) {
Write-Error "Ошибка при сборке пакета $_"
Exit 1
}
Write-Output "Пакет $_ успешно собран"
Write-Output "==================="
$pkg_count += 1
}
Write-Output "Собрано пакетов: $pkg_count"