Как заставить 'sudo' захватить пароль из файла?

13

Я хочу запустить команду, которая требует пароль sudo, скажем:

sudo apt-get update

Разве это не должно работать (я сохранил пароль в обычном текстовом файле passwd.txt):

sudo apt-get update <~/passwd.txt

Это моя логика, объясняющая, почему он ДОЛЖЕН работать: когда требуется пароль, пользователя просят ввести пароль с клавиатуры. Но перенаправление stdinчтения из passwd.txtфайла должно работать.

Не так ли?

MichaelB
источник
Вы должны использовать expectскрипт tcl для автоматизации таких вещей.
Adobe
Если вам нужно спросить об этом, вы, вероятно, делаете что-то не так. Не могли бы вы поделиться тем, что вы пытаетесь достичь в первую очередь? Никогда не нужно использовать такие хаки. Это признак того, что должно быть лучшее решение.
gertvdijk
@gertvdijk Я не эксперт Ubuntu, но я учусь. Я дал это себе в качестве упражнения: «Выполните команду в Bash Script, которая требует привилегии sudo, используя только те знания, которыми я в данный момент обладаю. Без использования Google». Я пришел с ответом выше, и я подумал, что это должно работать. Позже я нашел лучшие, более безопасные решения на AskUbuntu.
MichaelB

Ответы:

27

sudoне читает пароль stdinпо умолчанию. С sudomanpage:

-S  The -S (stdin) option causes sudo to read the password from the standard input instead of the terminal device.
    The password must be followed by a newline character.

Итак, вы должны запустить:

sudo -S apt-get update <~/passwd.txt

Имейте в виду, что хранение паролей в файлах не является хорошей практикой. Вы должны прочитать:

Эрик Карвалью
источник
Понял! Короткий и сладкий ответ!
MichaelB