【发布时间】:2023-03-25 08:45:01
【问题描述】:
在 Linux 中,如何为需要 sudo 的命令链中的一个命令输入密码。我能想到的一个例子是,在运行了长时间的编译作业后,我想关闭机器。
make ; sudo init 0
我希望关闭命令仅在 make 完成后运行,但想立即输入密码,因为当第一个命令完成时我不会在那里。另外,我不想以超级用户权限运行“make”。所以切换到root并运行命令也是不可能的。
谢谢!
【问题讨论】:
在 Linux 中,如何为需要 sudo 的命令链中的一个命令输入密码。我能想到的一个例子是,在运行了长时间的编译作业后,我想关闭机器。
make ; sudo init 0
我希望关闭命令仅在 make 完成后运行,但想立即输入密码,因为当第一个命令完成时我不会在那里。另外,我不想以超级用户权限运行“make”。所以切换到root并运行命令也是不可能的。
谢谢!
【问题讨论】:
sudo sh -c "su -c 'make' $USER && init 0"
尽早并经常更改您的 uid。这就是芝加哥的方式!
【讨论】:
您可以运行 sudo -v 来更新 sudo 时间戳 - 这意味着您无需在 x 分钟内输入密码(默认为 5)。您可以通过编辑sudoers 文件中的timestamp_timeout 来更改超时。
您可能还想将命令更改为
make && sudo init 0
只有在 make 成功完成时才会关闭。
【讨论】:
一种可能性是使用Expect 自动输入密码。
以下是期望和密码的简单 HOW-TO:http://www.linux.com/archive/feed/56066
另一种可能性是编辑您的 /etc/sudoers 并将您的用户设置为无需密码即可使用 sudo。如果您检查该文件,它将在那里的 cmets 中进行说明。
【讨论】:
为什么不将密码输入sudo?
make; echo 'password' | sudo -S init 0
【讨论】:
System.exec("make; echo 'password' | sudo -S init 6");
将 sudo 的超时时间更改为足以覆盖您的使用的时间,然后运行 sudo echo 之类的内容进行身份验证,然后运行您的其他命令。只要没有达到密码超时,它就应该执行而无需再次询问。
【讨论】:
您可以将其添加到您的 sudoers 文件中
username ALL = NOPASSWD: /sbin/init
其中 username 是您要允许的用户名。
【讨论】:
sudo init 0,无需密码(虽然问题确实希望权限在之后消失)......之后不要让您的终端无人看管这个。