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

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

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

  • Почему в командной строке Windows не поддерживается ctrl + v?
  • Как просмотреть историю командной строки после закрытия окна в Windows 10?
  • Полный список команд Commandline
  • Как я могу расширить окно командной строки Windows 7?
  • Практичный (ближе к классическому Linux) способ использовать (автоматизировать) SUDO для CygWin
  • Как ввести регистрационную информацию для веб-сайта из командной строки linux
  • Благодаря!

  • Выпускать / обновлять IP-адрес через терминал в OS X
  • Есть ли ll команда symlink в Windows 7
  • Использовать командную строку для отображения отключенных сетевых интерфейсов в Windows? (Мобильная широкополосная связь и регулярные соединения)
  • Как уменьшить боль в командной строке
  • Windows 7. Откройте всплывающее меню Volume Control из командной строки.
  • Как сбросить внешний вид окна командной строки в Windows?
  • 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 
    Давайте будем гением компьютера.