2011-05-20 121 views
3

在Linux中,如何在需要sudo的命令鏈中輸入其中一個命令的密碼。我能想到的一個例子是,在運行長時間的編譯工作之後,我想關閉機器。在命令鏈中輸入sudo命令的密碼

make ; sudo init 0 

我想shutdown命令之後才運行make完成,但想輸入密碼馬上,因爲我不會在那裏當第一個命令完成。另外,我不想用超級用戶權限運行「make」。所以切換到root並運行命令也是不可能的。

謝謝!

回答

7
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

0

將sudo的超時更改爲足夠長的時間以覆蓋您的使用情況,然後運行諸如sudo echo之類的操作來進行身份驗證,然後運行其他命令。只要密碼超時還沒有達到,它應該執行而不再詢問。

0

您可以添加到您的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

1

一種可能性是使用Expect 來自動輸入密碼。

這裏有一個簡單的HOW-TO的期望和密碼:http://www.linux.com/archive/feed/56066

另一種可能性是編輯/ etc/sudoers文件和設置您的用戶能夠使用sudo沒有密碼。如果您檢查該文件,它將在那裏的評論中解釋。

3

您可以運行sudo -v更新sudo時間戳 - 這意味着你將不再需要爲X分鐘輸入密碼(默認值爲5)。您可以通過編輯sudoers文件中的timestamp_timeout來更改超時。

您也可能希望將命令改爲

make && sudo init 0 

其中如果make成功完成纔會關閉。

2

爲什麼不將密碼輸入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