我正在尝试从Ruby on Rails应用程序执行这样的命令:
sudo service squid3 restart
如果我尝试使用此代码:
output = ´sudo service squid3 retsart´
它不起作用,在控制台中我看到linux要求输入密码。 如何使用此命令传递密码?或其他建议......
答案 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 文件。