Я думаю, это довольно сложно или, по крайней мере, не очень часто.
Что я не после является:
Отключение пароля с помощью
user ALL=(ALL) NOPASSWD: ALL
Или подобный трюк.
Я знаю, как читать пароль sudo из stdin
, и это работает нормально, но вы все равно получаете сообщение:
$ echo $PW | sudo -S whoami
[sudo] password for oz123: root
На странице руководства показано, что я могу использовать -p
.
$ echo $PW | sudo -S -p "foo " whoami
foo root
$ echo $PW | sudo -S -p " " whoami
root
Единое пространство работает.
Передача пустой строки, похоже, не работает ...
$ echo $PW | sudo -S -p "" whoami
[sudo] password for oz123: root
Итак, вопрос:
Как определить пустую строку как допустимое значение для -p
?
$ sudo --version
Sudo version 1.8.21p2
Sudoers policy plugin version 1.8.21p2
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.21p2
(в Ubuntu 18.04)
Похоже, что с более новыми версиями sudo эта проблема решена:
На моем ноутбуке Gentoo:
$ sudo -k
$ echo "$PW" | sudo -S -p "" whoami
root
$ sudo --version
Sudo version 1.8.25p1
Sudoers policy plugin version 1.8.25p1
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.25p1
На старых машинах с Ubuntu вы можете просто перенаправить приглашение на /dev/null
:
sudo -S 2>/dev/null whoami