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

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

sudo服务squid3重启

如果我试试这个代码:

output = ´sudo service squid3 retsart´ 

它不工作,在控制台我看到,Linux要求密码。 我怎样才能通过这个命令的密码? 或其他build议…

Solutions Collecting From Web of "在Ruby on Rails应用程序中执行sudo命令"

你可以尝试sudo -S标志(如果你的系统可用)(check man):

 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方法来捕获密码提示并发送密码。 不过,允许Rails用户使用/ etc / sudoers中的NOPASSWD选项来访问服务命令而不使用密码可能更好。

你的sudo有一个-A开关吗?

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

我不会建议以任何方式将密码提供给您的Web服务器进程,尽管如此,您还是要使用sudoers文件。