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

4

我正在尝试从Ruby on Rails应用程序执行以下命令:

sudo service squid3 restart

如果我使用以下代码尝试:

output = ´sudo service squid3 retsart´

这个命令无效,在控制台中我看到Linux在请求密码。 我该如何通过此命令传递密码?或有其他建议...

4个回答

8
您可以将以下行添加到sudoers文件(/ etc / sudoers)中。
rails_user ALL=(root) NOPASSWD:/usr/sbin/service

这将允许rails_user用户以sudo身份执行服务命令,系统不会要求您输入密码。

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

Defaults requiretty

如果您的/etc/sudoers文件中没有此项配置,则无法从脚本中使用sudo命令。


3

如果您的系统支持(请查看man手册),您可以尝试sudo -S标志:

echo secretPasswd | sudo -S service squid3 restart

这意味着密码会以明文形式存在,因此您可以将需要执行任务的用户添加到sudoers中(这另外创建了一个安全问题)。

1

你的sudo命令有-A选项吗?

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

不过我不建议在任何情况下让密码对Web服务器进程可用,因此您应该使用sudoers文件。


0

你可以使用 expect 方法 来捕获密码提示并发送密码。不过,更好的做法是通过 /etc/sudoers 中的 NOPASSWD 选项允许 Rails 用户在无需密码的情况下访问服务命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接