Перезагрузите 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
но на этом этапе лучше сделать однострочный сценарий для перезагрузки вашего пользователя и ограничить его только возможностью перезагрузки. (Таким образом, вы не можете перезагрузиться даже как ваш пользователь без пароля, если не с этим скриптом).