Исходные данные
Три обособленных фирмы, расположенных в различных городах, объединились в единый холдинг с централизованной бухгалтерией. В каждой из фирм ранее были приобретены программные продукты фирмы 1С с аппаратными HASP-ключами, серверные операционные системы Microsoft Windows 2008 R2 и системные блоки ПК, для использования в качестве выделенных серверов терминалов. После реорганизации было принято решение о создании единого центрального сервера с доступом к данным из офисов обособленных подразделений по RDP протоколу. Естественное желание руководства минимизировать материальные затраты, привело к постановке следующей задачи: скомпоновать из имеющихся системных блоков наиболее производительную серверную платформу и поднять на ней RDP сервер с использованием раннее приобретенного ПО и лицензий.
Результаты предварительного тестирования
В качестве серверной платформы использовался системный блок на базе процессора Intel(R) Core(TM) i7-6700 3,4 GHz, с оперативной памятью DDR4 4x8 Gb и жеским диском SSD 240 Gb. Программное обеспечение: Microsoft Windows 2008 R2 Std; 1С:Бухгалтерия 8.3 ПРОФ + 1С:Зарплата и Управление Персоналом 8.3, с 3-мя аппаратными HASP-ключами на 5 пользователей; HASP License Manager Version 8.32.5.40 (May 2008), Sentinel LDK and Sentinal HASP Version 7.63 (December 2017) (ссылки на все общедоступное ПО в конце статьи ) .
Официальная поддержка 1С говорит о невозможности использования двух и более однотипных USB HASР-ключей на одном физическом ПК, в связи с особенностью их конструкции. Это полностью было подтверждено в процессе тестирования. Аналогичные результаты были получены при попытке использовать разные ключи под управлением различных гостевых ОС в системе виртуализации Oracle VirtualBox 5.2.4(для Windows). Проблема заключается в том, что ОС Windows присваивает одинаковые уникальные идентификаторы всем трем ключам и менеджер ключей может использовать только один из них.
Найденное решение
В отличии от Windows, Unix-подобные системы иначе идентифицируют USB-устройства. После некоторых раздумий, было решено провести тестирование ОС Linux Debian 9.5.0-amd64 в связке с Oracle VirtualBox 5.2.4 (для Linux). Процесс установки Debian и VirtualBox опускаю, в сети информации об этом огромное количество, ограничусь несколькими важными замечаниями. После запуска Debian НЕ УСТАНАВЛИВЙТЕ ПАКЕТЫ ДЛЯ USB-HASP ! В противном случае хостовая ОС займет их под себя и проброс в гостевую ОС не получится. Подключив три HASP-ключа, смотрим свойства USB устройств с помощью утилиты Vboxmanage. В терминале выполняем: vboxmanage list usbhost
Видим три устройства у которых нас особенно интересует значение UUID. Легко заметить, что каждое из устройств имеет свой уникальный UUID. Это означает что есть возможность избирательного подключения устройств к различным виртуальным машинам. Еще одно важное замечание: в настройках USB виртуальных машин необходимо включить контроллер USB, но НЕ ПОДКЛЮЧАТЬ ни один из HASP-ключей! Если хотя бы один ключ будет указан в настройках USB, при запуске виртуальной машины к ней будут подключены все имеющие HASP.
В среде VirtualBox 5.2.4 (для Linux) Было установлено 3 гостевых ОС: Microsoft Windows 2008 R2 Std и две Microsoft Windows 2003. В целях экономии дискового пространства и времени, вторая ВМ windows 2003 была клонирована из первой, в этом случае можно использовать один виртуальны диск для обеих машин и нет необходимости в установке ПО и настройке клонированной ВМ.
На первой ВМ с Windows 2008 R2 был настроен сервер терминалов и организован доступ к данным 1С 8.3, установлен Монитор HASP лицензий. На всех трех ВМ установлены драйверы HASP и Серверы HASP лицензий (ссылки на все общедоступное ПО в конце статьи ). Таким образом, после старта ВМ мы имеем возможность подключить к ней один из HASP-ключей, причем каждой машине можно назначить свой ключ.
Для того, чтобы 1С 8.3 могла работать со всеми тремя ключами, необходимо сделать изменения в файле "nethasp.ini" , находящемся в подпапке "conf" папки установки платформы. В параметре "NH_SERVER_ADDR" необходимо, через запятую, перечислить IP адреса виртуальных машин с ключами: "NH_SERVER_ADDR = <IP первой ВМ>, <IP второй ВМ>, <IP третьей ВМ>". Аналогичные изменения необходимо внести в файл "nethasp.ini" Монитора HASP лицензий. Монитор лицензий начнет отображать информацию по ключам только после того как с соответствующего сервера лицензий будет получена хотя бы одна лицензия!
"Вишенка на торт"
Скорее всего Вам уже пришла в голову мысль о том, что каждый раз, после перезагрузки хостовой ОС, "в-ручную" подключать HASP-ключи к ВМ совсем "не круто". Я тоже так считаю и предлагаю следующую автоматизацию запуска:
В файл /etc/rc.local ОС Debian, перед exit 0 добавляем строки |
VBoxManage startvm <Имя 1-й ВМ> --type headless" <Имя пользователя> VBoxManage startvm <Имя 2-й ВМ> --type headless" <Имя пользователя> VBoxManage startvm <Имя 3-й ВМ> --type headless" <Имя пользователя> |
- это автоматический запуск ВМ, в фоновом режиме, при перезагрузке Debian, |
sudo su -c "/<место расположения скрипта>/PowerUSBKeys.sh" <Имя пользователя> |
- это запуск скрипта, подключающего HASP-ключи, после старта ВМ. <Имя пользователя> - пользователь, |
Скрипт PowerUSBKeys.sh анализирует результат vboxmanage list usbhost , создает и выполняет дополнительный скрипт, подключающий HASP-ключи к виртуальным машинам. Вот его содержимое:
#!/bin/bash vboxmanage list usbhost>/<место расположения скрипта>/usblist i=0 cat /<место расположения скрипта>/usblist | while read line; do if [ "${line:0:5}" = "UUID:" ]; then ((i ++)) if [ $i = 1 ]; then echo "vboxmanage controlvm <Имя 1-й ВМ> usbattach {${line:20}}">/<место расположения скрипта>/startKey.sh fi if [ $i = 2 ]; then echo "vboxmanage controlvm <Имя 2-й ВМ> usbattach {${line:20}}">>/<место расположения скрипта>/startKey.sh fi if [ $i = 3 ]; then echo "vboxmanage controlvm <Имя 3-й ВМ> usbattach {${line:20}}">>/<место расположения скрипта>/startKey.sh fi fi done chmod ugo+x /<место расположения скрипта>/startKey.sh /bin/bash /<место расположения скрипта>/startKey.sh rm /<место расположения скрипта>/startKey.sh rm /<место расположения скрипта>/usblist |
* <место расположения скрипта> - везде заменить на путь к папке со скриптом (без символов "<>") !
* <Имя ...-й ВМ> - везде заменить на наименование соответствующей ВМ, как оно заданго в VirtualBox-е (без символов "<>") !
Ссылки для скачивания:
HASP License Manager Version 8.32.5.40 (May 2008) | |
Sentinel LDK and Sentinal HASP Version 7.63 (December 2017) | |
Aladdin Monitor Version 1.4.2 (July 2008) | |
Скрипт PowerUSBKeys.sh |