Предварительно санкционируйте sudo? (Так что это можно запустить позже)

Я часто устанавливаю, чтобы мой рабочий компьютер выполнял некоторые трудоемкие вычисления, прежде чем я вернусь домой вечером. После того, как все будет готово, я хочу, чтобы он закрылся. Однако, поскольку выключение требует привилегий root, оно должно выполняться с использованием sudo . Очевидно, что я не могу ввести свой пароль через 7 часов, так что до сих пор мне пришлось выполнить весь список команд (cmd1; cmd2; cmd3; … shutdown) как root – не идеально.

Есть ли способ, который я могу «предварительно авторизовать» sudo в конце списка команд? Как-то я могу полностью использовать свой пароль в начале выполнения, поэтому bash мне не нужен позже?

Благодаря!

5 Solutions collect form web for “Предварительно санкционируйте sudo? (Так что это можно запустить позже)”

Чтобы завершить первый ответ:

Настройте способ, которым ваши невыгодные трудоемкие вычисления могут инициировать выключение, ожидающее в привилегированной оболочке (запущенной sudo -s или sudo su ). Использование файла в качестве флага – хороший, простой способ сделать это. Итак, в вашей непривилегированной оболочке выполните

 cmd1; cmd2; cmd3; > ok_to_shutdown_now 

И в вашей привилегированной оболочке запустите скрипт, который говорит:

 while [ ! -f ok_to_shutdown_now ] do sleep 60 done shutdown 

У вас есть довольно много вариантов, чтобы достичь своей цели, в зависимости от того, что вы готовы рисковать. Не все из них связаны с кэшированием ваших учетных записей sudo.

Вы можете отключить необходимый пароль для своего пользователя или для вашего пользователя, выполняющего shutdown , добавив строку с тегом NOPASSWD в ваш файл sudoers.

Вы можете аутентифицироваться в sudo, запустив sudo -v . Ваш пароль будет кэширован в течение 15 минут, поэтому вам нужно будет запустить sudo -v все, скажем, 12 минут, чтобы обновить ваши учетные данные и убить эту задачу после завершения последнего пакетного процесса.

Если вы знаете, как долго проходят ваши пакетные процессы, вы можете просто отключить время, после которого он должен отключить систему.

Вы можете увеличить 15-минутный тайм-аут кеша паролей по умолчанию с параметром timestamp_timeout в файле sudoers. Либо произвольно, либо, если вы знаете, как долго обрабатываются партии, к тому времени. Или вы можете полностью отключить таймаут с отрицательным значением и использовать sudo -v для аутентификации и sudo -k «выйти из sudo», когда вы закончите. Между этими двумя вызовами вы можете запустить sudo не вводя пароль снова.

Если вы не в порядке, не требуя пароля для sudo, но вместо этого сохраните свой пароль в текстовом файле, который может быть прочитан только вашим пользователем, тогда вы можете создать небольшой пакетный скрипт, который выводит ваш пароль на стандартный вывод, и либо использовать это как пропустить Программу для sudo или просто использовать ее в трубе с sudo -S , которая считывает пароль из stdin . В сочетании с небольшим скриптом вы можете сохранить свой пароль в текстовом файле в начале, из которого он считывается скриптом, предоставляя его sudo и в конце удаляет этот файл снова.

Эхо-скрипт

 #!/bin/bash echo mypassword 

или

 #!/bin/bash cat /mysecretpwfile 

И затем ./echopw | sudo -S ./echopw | sudo -S или

 export ASKPASS=~/echopw sudo -A shutdown -h now 

Или, наконец, вы можете просто поместить команду shutdown в сценарий оболочки и установить сценарий оболочки suid, root root, вашу группу, 750.

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

Вы можете использовать

  sudo -s 

или

  sudo su 

(Читайте здесь разницу)

Это даст вам привилегии root и не позволит вам снова ввести свой пароль. Затем вы можете запускать команды sudo после этого, и они не будут запрашивать пароль.

ты мог

 sudo sh -c 'cmd1; cmd2; cmd3;... shutdown' 

Или предоставить привилегии для пользователя sudo shutdown без пароля. Для примера есть пример: выключение без корня

Самое простое решение – это, вероятно, сохранение пароля в переменной, а затем его передача из этой переменной в sudo -S .

 #!/bin/bash echo "Please enter your password:" read -s mypasswd #additional stuff echo $mypasswd | sudo -S shutdown -h now 
  • Практичный (ближе к классическому Linux) способ использовать (автоматизировать) SUDO для CygWin
  • Потерянный sudo / su на примере Amazon EC2
  • Как установить путь для команд sudo
  • Потерянное разрешение на использование команд sudo
  • Как я могу вернуться к тому, что sudo снова попросит пароль?
  • Wireshark: доступ к интерфейсам шины USB без sudo
  • Sudo -k vs. sudo -K
  • Msgstr "не найдено достоверных источников sudoers, исключая" ​​ошибку, в то время как chmodding / var / www
  • Почему wget дает ошибку при выполнении с sudo, но отлично работает без?
  • Почему я не могу использовать некоторые команды? (Например, vim)
  • Запустить rsync с правами root на удаленной машине
  • Как я могу запускать команды в PowerShell с разрешениями администратора?
  • Interesting Posts

    Как синхронизировать сохраненные разговоры Skype между машинами?

    Что означает «Windows не операционная система реального времени»?

    Почему я не могу копировать 7 ГБ файл на внешний USB-накопитель с разрешением 120 ГБ?

    Нет гладкой прокрутки на Windows 10

    Сценарий FOSS для разблокировки PDF для печати

    Редактирование тегов в связке файлов MP3?

    Как настроить дату Microsoft JSON?

    Неверная операция кросс-streamов: управление осуществляется из streamа, отличного от streamа, который был создан на

    Каков волшебный разделитель между именами файлов в ls output?

    Как очистить пароль безопасности BIOS на этом ноутбуке?

    Как найти exe, прослушивая порт?

    Можно ли использовать диск с памятью (например, USB-накопитель) в качестве ОЗУ?

    Я не могу начать xterm больше под Cygwin + Xming под Win 7

    Устройство USB 2.0, подключенное к концентратору USB 3.0, замедляет концентратор до 2,0 скоростей?

    Шифрование файлов на SD-карте

    Давайте будем гением компьютера.