我想这是相当棘手的,或者至少不是经常需要的。
我是什么不在此之后是:
使用以下方式禁用密码
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 版本
$ 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 上)
答案1
看来,新版本的 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