2011-05-03 75 views
3

我試圖像這樣從一個Ruby on Rails應用程序執行命令:on Rails應用程序執行在Ruby中sudo命令

sudo的服務squid3重啓

如果我用這個試試代碼:

output = ´sudo service squid3 retsart´ 

它不起作用,在控制檯我看到,linux要求輸入密碼。 如何通過此命令傳遞密碼?或其他建議...

回答

3

你可以嘗試,如果可用的須藤-S標誌您的系統上(檢查人):

echo secretPasswd | sudo -S service squid3 restart 

這意味着,密碼會在清楚,所以你可以添加一個需要執行任務的用戶給這些sudoers(這會造成另一個安全問題)。

6

您可以將下面的行添加到您的sudoers文件(/ etc/sudoers文件)

rails_user ALL=(root) NOPASSWD:/usr/sbin/service 

這將基本上讓rails_user用戶執行服務命令sudo的,並且系統不會要求你輸入密碼。

rails_user應該替換爲您正在運行您的rails進程的任何用戶。而且您還應該確保:

Defaults requiretty 

不存在於您的/ etc/sudoers中。如果沒有,您將無法使用腳本中的sudo。

0

您可以使用expect method來獲取密碼提示併發送密碼。但是,允許Rails用戶使用/ etc/sudoers中的NOPASSWD選項訪問服務命令而不使用密碼可能更好。

0

您的sudo是否有-A開關?

-A
通常,如果須藤需要密碼,它將從當前終端讀取它。如果指定了-A(askpass)選項,將執行幫助程序以讀取用戶密碼並將密碼輸出到標準輸出。如果設置SUDO_ASKPASS環境變量,則它指定輔助程序的路徑。否則,使用sudoers(5)中的askpass選項指定的值。

我不會建議其到Web服務器進程以任何方式提供的密碼,但這樣你要使用的sudoers的文件。