РЕЗЮМЕ: Мой сценарий, который включает ssh, отлично работает из командной строки, но часть ssh не работает, когда сценарий вызывается автоматическим демоном (apcupsd).
ДЕТАЛИ: У меня есть сервер ESXi и виртуальная машина CentOS 6.5, предназначенная для мониторинга ИБП APC Backup (через USB). Я использую APCUPSD для этого. Теория состоит в том, что в случае длительного отключения питания он будет подключаться к хосту ESXi по ssh, чтобы выключить систему. Все работает с точки зрения подключения к ИБП, обнаружения сбоев питания и т. Д., А также вызова сценария (на виртуальной машине CentOS), когда приходит время для завершения работы.
У меня есть установочные ключи с использованием ssh-keygen и т. Д., Поэтому я могу подключиться к хосту ESXi по ssh без пароля.
Если я запускаю сценарий вручную из командной строки, он работает нормально.
Но этого не происходит при автоматическом вызове apcupsd.
В частности, не работает команда ssh (другие строки в моем скрипте работают нормально).
Я попытался изменить команду, которую я запускаю, на простой ls и перенаправить вывод в файл (опять же, это отлично работает при запуске вручную из командной строки).
При автоматическом срабатывании мой выходной файл создается, но имеет нулевые байты.
Я пробовал множество разных вариантов с SSH, включая -i и -n. Кажется, я не получаю подробных сообщений об ошибках (например, с -v)
Глядя на /var/log/auth.log на хосте ESXi, можно предположить, что он даже не пытался установить соединение.
Несколько вещей, которые я пробовал:
/usr/bin/ssh -o StrictHostKeyChecking=no -x root@X.X.X.X "ls" >output_file
/usr/bin/ssh -n -i /root/.ssh/id)dsa root@X.X.X.X "ls" >output_file
ssh -n root@X.X.X.X >output_file
Если я echo $? >output_file
Я получаю код возврата 126, который, как мне кажется, является ошибкой авторизации CLI_ERR_NOT_AUTHORIZED: у пользователя недостаточно прав для выполнения команды. Дело в том, что я считаю, что apcupsd будет работать с правами root, поэтому я думал, что у него будут необходимые привилегии.
Кто-нибудь может помочь?
Проверьте / var / log / messages на наличие сообщений типа «apcupsd: не удалось получить псевдотерминал: отказано в разрешении». Если вы видите это, возможно, вас блокирует SELINUX. Попробуйте "setenforce 0" временно отключить SELINUX и посмотреть, работает ли он. Если это решит проблему, вы должны увидеть отклоненные ошибки в /var/log/audit/audit.log.
Запустите sudo yum install policycoreutils-python. Затем запустите «grep apcupsd /var/log/audit/audit.log | audit2allow -M mypol» и «semodule -i mypol.pp», чтобы разрешить apcupsd выполнять сеансы SSH.