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 в случаях неожиданного отключения электропитания.

Интересная статья! А не могли ли поподробнее про настройку публичного ключа написать?
Погуглите. Информации море, все досконально разжевано. Мне нечего добавить
неверно, права на оcтановку системы может иметь любой пользователь входящий в группу operator
Я написал “по умолчанию”, и это абсолютно верно