Перезагрузите EC2 Amazon Linux (на основе Redhat) из скрипта

Я хотел бы перезагрузить мой Linux из скрипта. Скрипт не запускается от имени пользователя root.

С помощью sudo reboot производит

sudo: извините, у вас должен быть tty для запуска sudo.

Равнина reboot выдает ошибку

Нужно быть root

Я знаю, что могу редактировать файл sudoers, но есть ли более простой способ?

2 ответа

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

Ты можешь использовать ec2-reboot-instances instance_id запросить EC2 перезагрузить любой экземпляр, включая его самого. Экземпляр может получить свой собственный идентификатор, используя либо:

curl -s http://169.254.169.254/latest/meta-data/instance-id

или же

ec2-metadata -i

так что в качестве одной строки в командной строке вы должны использовать это:

ec2-reboot-instances -O YOURAWSKEY -W YOURAWSSECRET --region=YOURREGION $(ec2-metadata -i |cut -d':' -f 2)

Полный список функций EC2 находится здесь.

reboot, halt а также shutdown Команды обычно требуют root по соображениям безопасности [ 1 ].
Пишем в гугле how to run sudo in a script это отвечает с

Добавьте свой сценарий в файл /etc/sudoers с атрибутом NOPASSWD, чтобы его можно было запускать без запроса пароля. Вы можете привязать это к определенному пользователю (или группе пользователей) или разрешить запускать его с помощью sudo любым пользователем в вашей системе.

Справедливо, если вы можете ограничить вышесказанное сценарием в одну строку, который запускает только reboot командование Однако это приведет к перезагрузке вашего компьютера без пароля из этого сценария + пользовательской конфигурации.

Альтернатива это подвергнет вас риску того, что у каждого будет возможность перезагрузить вашу машину. Прочитайте, например, ответы [ 2, 4, 5 ]

... вам нужно добавить бит suid [ 3, 4, 5 ] к этим командам. Но имейте в виду, что каждый в вашей системе, имеющий доступ к оболочке, может отключить вашу машину.

Но я также убежден, что использовать suid - плохая идея.
В комментарии к [ 2 ] снова предлагается изменить с помощью visudo...

%sudo ALL = NOPASSWD: /sbin/reboot 

но на этом этапе лучше сделать однострочный сценарий для перезагрузки вашего пользователя и ограничить его только возможностью перезагрузки. (Таким образом, вы не можете перезагрузиться даже как ваш пользователь без пароля, если не с этим скриптом).

Другие вопросы по тегам