У меня проблема в том, что:
У меня есть файл .sh
#!/bin/bash
var=$(zenity --forms --title="Tắt giờ vợ yêu nhé" \
--text="Vợ muốn tắt máy sau bao nhiêu phút nữa" \
--separator="," \
--add-entry="Vợ điền số vào đây")
case $? in
0) sudo shutdown -h $var
;;
1)
exit 0;;
-1)
echo "An unexpected error has occurred."
;;
esac
Как команда sudo может автоматически ввести пароль из команды echo или из файла. Я читал о параметрах sudo -S, но я не знаю, как это работает. Любой может привести пример по этому поводу! Спасибо, ребята
Лучше изменить правила sudo вместо того, чтобы хранить чистый пароль в текстовом файле:
Создайте новый файл, например /etc/sudoers.d/script_rights
, и нажмите
%user ALL = NOPASSWD:/sbin/shutdown
, где пользователь - это пользователь, которому разрешено запустить скрипт.sh. Тогда скрипт не будет запрашивать пароль для запуска команды выключения.
Не очень безопасно, просто чтобы сказать это, прежде чем я дам ответ, поскольку кто-то может просто открыть файл и увидеть пароль, но вот как:
Предположим, мы хотим выполнить команду sudo shutdown -h 1
но мы не хотим вводить пароль. Мы сделаем это так:
echo PASSWORD | sudo -S shutdown -h1
Например, если бы мой пароль был x , то он бы выглядел примерно так:
echo x | sudo -S shutdown -h1
Другой пример: если я хотел сделать обновление apt-get, то обновлялся без ввода пароля. Я бы сделал это:
echo x | sudo -S apt-get update && sudo apt-get upgrade
Первый sudo (тот, у кого параметр -S) получит пароль со стандартного ввода, в данном случае с клавиатуры в терминале. , Затем он будет хранить пароль для оставшегося сеанса терминала. Поскольку в этом сеансе я выполняю 2 команды apt-get, одну с обновлением, а другую с обновлением, нет необходимости вводить пароль еще раз для второго apt-get, поскольку пароль активен для используемого сеанса. Таким образом, остальным командам sudo не нужно будет вводить другой пароль до тех пор, пока сессия не закроется (пока вы не закроете терминал или скрипт, используя пароль, закончится).