Предоставить пароль SU в сценарии bash, в скрипте?

Цель состоит в том, чтобы перезагрузить компьютер, если он не получил команду abort от пользователя. Проблема заключается в том, что как настроить терминалы, пользователь должен предоставить пароль 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" 

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

  • Команда: sudo su -
  • Скопируйте файлы в Linux, избегайте копирования, если файлы существуют в месте назначения
  • Разрешение sudo запрещено
  • Очистить stdin перед чтением
  • Переместить все файлы из подкаталогов в текущий каталог?
  • Как мне показать только базовый каталог в моем терминале Ubuntu?
  • Изменить: sudo и expect будут, поскольку решения, связанные с их установкой, будут невозможны из-за большого количества документов для разрешения и ограниченного времени. Также мы хотели бы использовать init 6 или shutdown -r вместо reboot .

  • Программа для проверки / поиска символов UTF-8 / Unicode в строке в командной строке?
  • Поместить в bash или zsh history абсолютный путь к файлам, над которыми я работаю
  • Получить домашний каталог по имени пользователя
  • Страница Bash Man: kill <pid> vs kill -9 <pid>
  • Использование инструмента командной строки cURL на Mac, что я могу сделать с этим скриптом, чтобы попросить его получить данные запаса, которые заменят запятые NO SPACES
  • Вызов сценария с ./bla.sh vs. bla.sh
  • 3 Solutions collect form web for “Предоставить пароль SU в сценарии bash, в скрипте?”

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

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

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

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

    Вы можете сделать это с помощью 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) 
    Давайте будем гением компьютера.