在Ruby on Rails应用程序中执行sudo命令

时间:2011-05-03 07:51:44

标签: ruby-on-rails linux ubuntu

我正在尝试从Ruby on Rails应用程序执行这样的命令:

  

sudo service squid3 restart

如果我尝试使用此代码:

output = ´sudo service squid3 retsart´

它不起作用,在控制台中我看到linux要求输入密码。 如何使用此命令传递密码?或其他建议......

4 个答案:

答案 0 :(得分:8)

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

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

这基本上让rails_user用户以sudo的身份执行service命令,系统不会要求你输入密码。

rails_user应该替换为您正在运行rails进程的任何用户。你还应该确保

Defaults requiretty
你的/ etc / sudoers中没有

。如果不是,您将无法使用脚本中的sudo。

答案 1 :(得分:3)

如果您的系统可用,您可以尝试使用sudo -S标志(检查人员):

echo secretPasswd | sudo -S service squid3 restart

这意味着密码将清除,因此您可以将需要执行任务的用户添加到sudoers(顺便说一下,这会产生另一个安全问题)。

答案 2 :(得分:0)

您可以使用expect method来捕获密码提示并发送密码。但是,使用/ etc / sudoers中的NOPASSWD选项允许Rails用户在没有密码的情况下访问服务命令可能是个更好的主意。

答案 3 :(得分:0)

您的sudo是否有-A次切换?

  

<强> -A
  通常,如果sudo需要密码,它将从当前终端读取它。如果指定了-A(askpass)选项,则执行帮助程序以读取用户的密码并将密码输出到标准输出。如果设置了SUDO_ASKPASS环境变量,则它指定辅助程序的路径。否则,将使用 sudoers(5)askpass选项指定的值。

我不建议以任何方式提供您的网络服务器进程密码,因此您需要使用 sudoers 文件。