Установите HISTIGNORE на " sudo -S "
$ export HISTIGNORE='*sudo -S*'
Затем безопасно передайте свой пароль sudo:
$ echo "your_password" | sudo -S -k <command>
"HISTIGNORE" означает не сохранять эту команду в историю. Это история в памяти или файл "~/.bash_history".
Например, ниже приведен безопасный путь вашего пароля к команде sudo, без сохранения истории вашего пароля.
«-S» означает использовать стандартный пароль для пароля,
«-K» означает игнорировать кэшированные учетные данные, чтобы заставить sudo всегда спрашивать. Это для последовательного поведения.
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -k whoami
$ echo "<your_password>" | sudo -S -k cat /etc/shadow
$ echo "<your_password>" | sudo -S -k bash /tmp/myscript.sh
Недостатком вышеописанного метода является то, что если вы хотите увидеть команды, которые вы запускали в истории, их больше не будет. Другой способ заключается в обновлении кэша учетных данных аутентификации sudo (по умолчанию включено с 5-минутным таймаутом), затем запустите sudo отдельно. Но недостатком этого является то, что вам нужно знать о 5-минутном кеше.
Например:
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -v
$ sudo whoami
$ echo "<your_password>" | sudo -S -v
$ sudo cat /etc/shadow
$ echo "<your_password>" | sudo -S -v
$ sudo /tmp/myscript.sh
Примечание. Я запускал sudo перед каждой командой, чтобы убедиться, что кэш sudo обновляется, поскольку по умолчанию установлено значение 5 минут. Да, whoami не должно занимать 5 минут, но я полагаю, что он может запускаться перед каждой командой для обеспечения согласованности. Вы также можете поместить "export HISTIGNORE = ' sudo -S '" в файл ~/.bashrc, а затем загрузить его с помощью ". ~/.bashrc "или выйдите из системы, затем войдите. Тем не менее, я думаю использовать это в целях написания сценариев, поэтому я буду держать его на вершине всех моих сценариев для лучшей практики безопасности. Вместо этого также может быть полезно установить "echo" "| sudo -S -v" в переменную, а затем просто запускать переменную перед каждой командой, которой нужны привилегии root, см. Комментарий Janar. Комментарий "John T" также должен включать параметр «-k», как будто вы запускаете «sudo -S» без «-k», а кеш аутентификации sudo уже имеет ваши учетные данные (и все еще действителен, кеш аутентификации sudo по умолчанию равен 5 минут), тогда bash запустит ваш пароль вместо команды, что плохо.