При администрировании крупных систем на базе 1С:Предприятие часто возникает необходимость автоматизировать процесс завершения активных сеансов. Это может потребоваться для выполнения регламентных операций, обновления конфигурации или принудительного освобождения лицензий в ночное время. Однако при работе в среде Linux разработчики часто сталкиваются со специфическими ошибками аутентификации, даже если пароли указаны верно. В этой статье мы подробно разберем, как реализовать удаление сеансов через сервер администрирования (RAS) и устранить типичную ошибку cluster administrator is not authenticated.
Рассмотрим стандартную ситуацию: сервер 1С:Предприятия развернут на ОС Linux. Для программного управления сеансами планируется использовать возможности Библиотеки стандартных подсистем (БСП) или прямой вызов утилиты rac. При попытке выполнить удаление сеансов из кода 1С система возвращает ошибку администрирования, указывающую на то, что администратор кластера не прошел аутентификацию.
Проанализируем программный код, который инициирует этот процесс. Как правило, работа строится на заполнении структур параметров администрирования и вызове методов общего модуля АдминистрированиеКластераКлиентСервер.
&НаСервере
Процедура НайтиИУничтожитьСеансыНаСервере()
// Определяем типы клиентов, которые подлежат отключению
КлиентскиеПриложения = Новый Массив;
КлиентскиеПриложения.Добавить(ВРег("1CV8")); // Толстый клиент
КлиентскиеПриложения.Добавить(ВРег("1CV8C")); // Тонкий клиент
КлиентскиеПриложения.Добавить(ВРег("WebClient")); // Web-клиент
КлиентскиеПриложения.Добавить(ВРег("COMConnection")); // Внешнее соединение
// Получаем список всех текущих сеансов информационной базы
СеансыИнформационнойБазы = ПолучитьСеансыИнформационнойБазы();
НомераСеансов = Новый Массив;
Для Каждого СеансИБ Из СеансыИнформационнойБазы Цикл
// Проверяем, соответствует ли приложение нашему списку
Если КлиентскиеПриложения.Найти(ВРег(СеансИБ.ИмяПриложения)) <> Неопределено Тогда
// Например, отсекаем сеансы, начатые ранее текущего дня
Если СеансИБ.НачалоСеанса < НачалоДня(ТекущаяДата()) Тогда
НомераСеансов.Добавить(СеансИБ.НомерСеанса);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НомераСеансов.Количество() > 0 Тогда
// Настройка параметров подключения к RAS (Remote Administration Server)
ПараметрыАдминистрирования = Новый Структура();
ПараметрыАдминистрирования.Вставить("ТипПодключения", "RAS");
ПараметрыАдминистрирования.Вставить("АдресСервераАдминистрирования", "192.168.1.100");
ПараметрыАдминистрирования.Вставить("ПортСервераАдминистрирования", 1545);
ПараметрыАдминистрирования.Вставить("ПортКластера", 1541);
// Указываем учетные данные администратора кластера
ПараметрыАдминистрирования.Вставить("ИмяАдминистратораКластера", "SupUser");
ПараметрыАдминистрирования.Вставить("ПарольАдминистратораКластера", "P@ssword123");
// Настройка параметров информационной базы
ПараметрыАдминистрированияИБ = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера();
ПараметрыАдминистрированияИБ.ИмяВКластере = "WorkBase";
ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы = "AdminIB";
ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы = "IBPass";
// Формируем фильтр по номерам сеансов
СтруктураСеанса = Новый Структура;
СтруктураСеанса.Вставить("Свойство", "Номер");
СтруктураСеанса.Вставить("ВидСравнения", ВидСравнения.ВСписке);
СтруктураСеанса.Вставить("Значение", НомераСеансов);
Фильтр = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СтруктураСеанса);
// Выполняем удаление через БСП
АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования, ПараметрыАдминистрированияИБ, Фильтр);
КонецЕсли;
КонецПроцедуры
Выясним, почему при выполнении этого кода возникает ошибка аутентификации. Особенность серверов 1С на Linux заключается в том, что по умолчанию в свежесозданном кластере список администраторов пуст. В операционной системе Windows консоль администрирования часто позволяет выполнять действия под текущей учетной записью системы или "неявным" администратором. В Linux при использовании RAS (Remote Administration Server) ситуация иная.
Важный нюанс: Если в кластере не создано ни одного администратора, некоторые команды могут выполняться, но как только вы пытаетесь передать конкретное имя пользователя (например, "SupUser"), сервер начинает проверять его в своем внутреннем списке. Если такого пользователя физически не существует в настройках кластера, аутентификация не пройдет.
Рассмотрим, как проверить это через консоль Linux с помощью утилиты rac. Попробуем получить список баз данных, используя параметры администратора:
sudo "/opt/1C/v8.3/x86_64/rac" 192.168.1.100:1545 infobase summary --cluster="UUID-кластера" --cluster-user=SupUser --cluster-pwd=xxxx list
Если в ответ вы получаете Error of administration operation: Cluster administrator is not authenticated, значит, в самом кластере 1С необходимо явно создать администратора с указанным именем и паролем.
Для исправления ситуации выполним следующие шаги:
SupUser). Назначьте ему пароль и полные права на управление кластером.ПараметрыАдминистрирования значения ключей ИмяАдминистратораКластера и ПарольАдминистратораКластера в точности соответствуют созданным в консоли.ras запущен и слушает нужный порт (по умолчанию 1545). В Linux это обычно проверяется командой systemctl status srv1cv8-ras.Проанализируем еще несколько технических моментов, которые помогут сделать решение более надежным:
Безопасность паролей: Передача пароля в открытом виде в параметрах команды (--cluster-pwd) небезопасна, так как он может отобразиться в истории команд или списке процессов. В промышленной эксплуатации старайтесь использовать механизмы защиты данных или переменные окружения, если это поддерживается вашей версией платформы.
Работа с типами клиентов: При удалении сеансов важно не "выстрелить себе в ногу". Обратите внимание на закомментированные строки в примере кода:
BackgroundJob — фоновые задания. Если их убивать без разбора, можно прервать критически важные расчеты.Designer — Конфигуратор. Случайное закрытие сеанса разработчика может привести к потере не сохраненных данных.Использование новых возможностей: Начиная с последних версий платформы 8.3 (в частности 8.3.15 и выше), 1С предоставляет HTTP-интерфейс администрирования. Если ваша конфигурация и платформа позволяют, рассмотрите переход с RAS на HTTP-запросы. Это позволит управлять кластером без использования COM-объектов (которые не работают в Linux) и без вызова внешних исполняемых файлов через КомандаСистемы.
Таким образом, ключевым фактором успеха при удалении сеансов на Linux является наличие явно созданного администратора кластера и корректная настройка параметров соединения с сервером администрирования RAS.