FreeBSD: выключение питания из командного файла Windows

Постановка задачи

Имеется несколько серверов (в моем случае пять с Windows NT / 2003 и один с FreeBSD) и два UPS’а APC Smart-UPS, программное обеспечение которых позволяет запустить командный файл в случае, если электропитание отсутствует, а аккумулятор разрядился, например, до 15% от первоначальной емкости. Программное обеспечение UPS’ов установлено на серверы с Windows NT. Для обеспечения корректной остановки всех серверов процедура выключения дублируется из-за неравномерного распределения нагрузки по UPS’ам, неравномерного уменьшения емкости аккумуляторов и т.д. Таким образом, при разрядке аккумулятора любого из UPS’ов до критического значения начинается процесс остановки всех шести серверов. Это достаточно надежное решение, которое много раз себя оправдало. Единственной нетривиальной задачей в таком случае является выключение сервера с FreeBSD командой, выполненной на сервере с Windows NT / 2003.

Исходные данные

Для того, чтобы все, что описано ниже, работало корректно, на Вашем сервере должна использоваться операционная система FreeBSD версии 4.xx или выше, а также на нем должна быть настроена служба SSH с аутентификацией по публичному ключу. Подойдет и аутентификация по паролю, но она имеет массу многократно описанных недостатков. Естественно, материнская плата сервера должна поддерживать функции автоматического управления питанием (поддержка таких функций имеется у подавляющего большинства современных материнских плат).

Добавление поддержки APM

Добавление поддержки APM (Advanced Power Management) необходимо делать только для FreeBSD версии ниже 5.0, т.к. начиная с версии 5.0, операционная система содержит автоматически загружаемый модуль ядра, обеспечивающий поддержку ACPI (Advanced Configuration and Power Interface) – более универсального механизма управления ресурсами и электропитанием. Для добавления поддержки APM необходимо:
1. Активировать в BIOS опцию ACPI Support Enabled;
2. Добавить в файл конфигурации ядра строку device apm0 и пересобрать ядро;
3. Добавить в файл /etc/rc.conf строку apm_enable="YES";
4. Перезагрузить систему.
После выполнения перечисленных действий команда shutdown -p now должна приводить к завершению работы и выключению сервера.

Установка и настройка sudo

По умолчанию команды остановки системы могут выполняться только суперпользователем root, однако, с точки зрения безопасности ни в коем случае нельзя разрешать ему удаленный доступ к серверу. Для обеспечения возможности остановки системы с удаленного компьютера обычным пользователем можно использовать утилиту sudo, которую лучше всего установить из портов:

cd /usr/ports/security/sudo
make install clean

Конфигурация sudo хранится в файле /usr/local/etc/sudoers. Для редактирования данного файла можно использовать команду visudo, которая загрузит его в редактор по умолчанию, или просто открыть данный файл в любимом текстовом редакторе. В рассматриваемом случае файл конфигурации sudo должен содержать следующие строки:

Host_Alias HALTHOSTS = 127.0.0.1,192.168.0.0/24
User_Alias HALTUSERS = user
Cmnd_Alias HALTCMNDS = /sbin/shutdown -p now
HALTUSERS  HALTHOSTS = NOPASSWD: HALTCMNDS

Такая конфигурация позволяет пользователю user выполнить команду sudo shutdown -p now с локального хоста, а также с хостов подсети 192.168.0.0/24 без ввода каких-либо паролей. Естественно, Вам следует подкорректировать IP-адреса и имя пользователя.

Удаленное завершение работы

Для подключения к серверу и выполнения необходимой команды я рекомендую использовать утилиту plink, из бесплатного пакета PuTTY. Выше я уже сказал, что подключение к серверу с FreeBSD будет выполняться по протоколу SSH, для аутентификации пользователя будет использоваться публичный ключ. В таком случае команда завершения работы примет следующий вид (с учетом того, что папка, которая содержит установленный пакет PuTTY, добавлена в переменную окружения PATH):

plink -l user -i <имя файла, который содержит закрытый ключ> <IP-адрес сервера с FreeBSD> sudo shutdown -p now

В первый раз следует выполнить данную команду в интерактивном режиме, чтобы подтвердить подлинность удаленного сервера с FreeBSD.

Заключение

Выполнив действия, описанные в данной статье, Вы больше никогда не будете переживать о целостности файловых систем поддерживаемых Вами серверов с операционной системой FreeBSD в случаях неожиданного отключения электропитания.

Другие статьи в рубрике ‘FreeBSD » Интеграция с Windows’

4 комментария

  1. dimokkk, 12 марта 2010 г. в 22:18

    Интересная статья! А не могли ли поподробнее про настройку публичного ключа написать?

  2. Проходил мимо, 16 апреля 2010 г. в 20:29

    команды остановки системы могут выполняться только суперпользователем root

    неверно, права на оcтановку системы может иметь любой пользователь входящий в группу operator

Оставьте комментарий

Изображения должны быть включены!