我正在尝试从Ruby on Rails应用程序执行以下命令:
sudo service squid3 restart
如果我使用以下代码尝试:
output = ´sudo service squid3 retsart´
这个命令无效,在控制台中我看到Linux在请求密码。 我该如何通过此命令传递密码?或有其他建议...
我正在尝试从Ruby on Rails应用程序执行以下命令:
sudo service squid3 restart
如果我使用以下代码尝试:
output = ´sudo service squid3 retsart´
这个命令无效,在控制台中我看到Linux在请求密码。 我该如何通过此命令传递密码?或有其他建议...
rails_user ALL=(root) NOPASSWD:/usr/sbin/service
应将rails_user替换为您正在运行rails进程的用户。您还应确保
Defaults requiretty
如果您的/etc/sudoers文件中没有此项配置,则无法从脚本中使用sudo命令。
如果您的系统支持(请查看man手册),您可以尝试sudo -S标志:
echo secretPasswd | sudo -S service squid3 restart
你的sudo
命令有-A
选项吗?
-A
通常情况下,如果sudo需要密码,它会从当前终端读取密码。如果指定了-A
(askpass)选项,则会执行一个辅助程序来读取用户的密码并将密码输出到标准输出。如果设置了SUDO_ASKPASS
环境变量,则它指定了辅助程序的路径。否则,将使用sudoers(5)中askpass
选项指定的值。
不过我不建议在任何情况下让密码对Web服务器进程可用,因此您应该使用sudoers文件。
你可以使用 expect 方法 来捕获密码提示并发送密码。不过,更好的做法是通过 /etc/sudoers 中的 NOPASSWD 选项允许 Rails 用户在无需密码的情况下访问服务命令。