4

Цель состоит в том, чтобы перезагрузить компьютер, если он не получает команду прерывания от пользователя. Проблема заключается в том, что при настройке терминалов пользователь должен предоставить пароль SU для команд shutdown , init , reboot и т.д. Мы задаемся вопросом, возможно ли ввести пароль в самом bash-скрипте, возможно, используя stdin. то есть:

#!/bin/bash
# (script)
echo "Terminal will restart in 60s, Ctrl+C to cancel."
sleep 60
su - root -c "init 6" < "password"

Мы попытаемся поместить пароль в файл и ввести его.

Изменить: sudo и expect , как решения, так как их установка будет невозможна из-за огромного количества документов для получения разрешения и ограниченного периода времени. Также мы хотели бы использовать init 6 или shutdown -r вместо reboot .

3 ответа3

2

Вы можете настроить sudo чтобы любой пользователь мог запускать определенные команды, указанные вами как root, без необходимости ввода пароля. См. Эту статью о сбое сервера для описания того, как настроить sudo .

Затем в вашем скрипте используйте sudo, а не su:

перезагрузка sudo

1

AFAIK, вы не можете делать то, что вы просите. Когда вы используете stdin с < , пароль будет введен через stdin задолго до того, как оболочка действительно запросит пароль. Вы должны попробовать и использовать sudo. Если нет, лучше всего chmod reboot и дать себе права на выполнение.

0

Вы можете сделать это с помощью socat:

user@host$ (sleep 1; echo SuperSecr3t) | socat - EXEC:'su -c id',pty
Password: ### No input here, just wait 1sec
uid=0(root) gid=0(root) groups=0(root)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .