在一系列命令中输入sudo命令的密码

5

在Linux中,我如何为一个需要sudo的命令链中的一个命令输入密码。我能想到的一个例子是,在运行长时间的编译作业后,我想关闭机器。

make ; sudo init 0 

我希望在make完成后运行关闭命令,但想立即输入密码,因为当第一个命令完成时我不会在场。另外,我不想以超级用户权限运行“make”。所以切换到root并运行命令也不可行。
谢谢!
6个回答

7
sudo sh -c "su -c 'make' $USER && init 0"

尽早并经常更改您的uid。这就是芝加哥的方式!


1
以上命令是这样的吗?您以超级用户身份运行shell,但在其中,“su”命令以当前用户身份运行“make”,之后以超级用户身份运行“init 0”。 - Rohit
1
@Rohit:是的,这正是它所做的。请注意使用双引号,以便在uid更改之前,在外壳上下文中解释$USER。此外,超级用户可以运行su而无需提供密码。 - Seth Robertson

3
您可以运行sudo -v命令来更新sudo时间戳,这意味着您在x分钟内(默认为5分钟)不需要输入密码。您可以通过编辑sudoers文件中的timestamp_timeout来更改超时时间。
您还可能想要更改您的命令为:
make && sudo init 0

只有在成功完成编译后,程序才会关闭。


1

一种可能性是使用Expect自动化密码输入。

这里有一个关于expect和密码的简单HOW-TO:http://www.linux.com/archive/feed/56066

另一种可能性是编辑您的/etc/sudoers文件,并设置您的用户可以在不需要密码的情况下使用sudo。如果您检查该文件,其中的注释将对此进行解释。


1
为什么不将密码输入到sudo中呢? make; echo 'password' | sudo -S init 0

+1,这是我需要做的事情:System.exec(“make; echo'password' | sudo -S init 6”); - user285594

0

更改sudo的超时时间,使其足够长以覆盖您的使用情况,然后运行类似sudo echo的内容进行身份验证,接着再运行其他命令。只要密码超时时间没有达到,它就应该会在不再询问密码的情况下执行。


0

您可以将其添加到您的sudoers文件中

username ALL = NOPASSWD: /sbin/init

其中,username是您想允许的用户名。


功能正常,但有副作用,即用户可以随时执行 sudo init 0 命令而无需密码(尽管问题实际上是想要在之后渐变时获取权限)......这之后不要让你的终端处于无人看管状态。 - Konerak
是的,这是一个不安全的解决方案,但大多数发行版都允许用户通过 GUI 关闭/重启。 - freethinker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接