在命令链中输入sudo命令的密码

问题描述:

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

make ; sudo init 0 

我想shutdown命令之后才运行make完成,但想输入密码马上,因为我不会在那里当第一个命令完成。另外,我不想用超级用户权限运行“make”。所以切换到root并运行命令也是不可能的。

谢谢!

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

提前和经常更改您的uid。这是芝加哥的方式!

+1

这是上面的命令吗?你以超级用户身份运行一个shell,但是在其中,“su”命令作为当前用户运行“make”,之后“init 0”以超级用户身份运行。 – Rohit 2011-05-20 08:50:18

+0

@罗依特:是的,这正是它所做的。请注意使用双引号,以便在更改uid之前在外壳的上下文中解释$ USER。而且,超级用户可以运行su而无需提供密码。 – 2011-05-20 18:01:41

将sudo的超时更改为足够长的时间以覆盖您的使用情况,然后运行诸如sudo echo之类的操作来进行身份验证,然后运行其他命令。只要密码超时还没有达到,它应该执行而不再询问。

您可以添加到您的sudoers文件

username ALL = NOPASSWD: /sbin/init 

其中username是要允许的用户名。

+0

作品,但用户的sideeffect被执行'须藤的init 0'随时随地,无需密码(而这个问题确实需要的权限之后褪色)......不要离开你的终端之后无人看管。 – Konerak 2011-05-20 06:18:59

+0

是一种不安全的解决方案,但大多数发行版都允许用户通过GUI关闭/重新启动。 – freethinker 2011-05-20 06:29:56

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

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

另一种可能性是编辑/ etc/sudoers文件和设置您的用户能够使用sudo没有密码。如果您检查该文件,它将在那里的评论中解释。

您可以运行sudo -v更新sudo时间戳 - 这意味着你将不再需要为X分钟输入密码(默认值为5)。您可以通过编辑sudoers文件中的timestamp_timeout来更改超时。

您也可能希望将命令改为

make && sudo init 0 

其中如果make成功完成才会关闭。

为什么不将密码输入sudo

make; echo 'password' | sudo -S init 0

+0

+1,这是我需要做的:'System.exec(“make; echo'password'| sudo -S init 6”);'' – YumYumYum 2012-10-11 21:24:42