我試圖像這樣從一個Ruby on Rails應用程序執行命令:on Rails應用程序執行在Ruby中sudo命令
sudo的服務squid3重啓
如果我用這個試試代碼:
output = ´sudo service squid3 retsart´
它不起作用,在控制檯我看到,linux要求輸入密碼。 如何通過此命令傳遞密碼?或其他建議...
我試圖像這樣從一個Ruby on Rails應用程序執行命令:on Rails應用程序執行在Ruby中sudo命令
sudo的服務squid3重啓
如果我用這個試試代碼:
output = ´sudo service squid3 retsart´
它不起作用,在控制檯我看到,linux要求輸入密碼。 如何通過此命令傳遞密碼?或其他建議...
你可以嘗試,如果可用的須藤-S標誌您的系統上(檢查人):
echo secretPasswd | sudo -S service squid3 restart
這意味着,密碼會在清楚,所以你可以添加一個需要執行任務的用戶給這些sudoers(這會造成另一個安全問題)。
您可以將下面的行添加到您的sudoers文件(/ etc/sudoers文件)
rails_user ALL=(root) NOPASSWD:/usr/sbin/service
這將基本上讓rails_user用戶執行服務命令sudo的,並且系統不會要求你輸入密碼。
rails_user應該替換爲您正在運行您的rails進程的任何用戶。而且您還應該確保:
Defaults requiretty
不存在於您的/ etc/sudoers中。如果沒有,您將無法使用腳本中的sudo。
您可以使用expect method來獲取密碼提示併發送密碼。但是,允許Rails用戶使用/ etc/sudoers中的NOPASSWD選項訪問服務命令而不使用密碼可能更好。
您的sudo
是否有-A
開關?
-A
通常,如果須藤需要密碼,它將從當前終端讀取它。如果指定了-A
(askpass)選項,將執行幫助程序以讀取用戶密碼並將密碼輸出到標準輸出。如果設置SUDO_ASKPASS
環境變量,則它指定輔助程序的路徑。否則,使用sudoers(5)中的askpass
選項指定的值。
我不會建議其到Web服務器進程以任何方式提供的密碼,但這樣你要使用的sudoers的文件。