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

发布于 2024-11-04 08:55:23 字数 234 浏览 0 评论 0原文

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

sudo服务squid3重新启动

如果我用这段代码尝试:

output = ´sudo service squid3 retsart´

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

I am trying to execute a command like this from a Ruby on Rails app:

sudo service squid3 restart

If i try it with this code:

output = ´sudo service squid3 retsart´

It don't work, in the console i see that linux asks the password.
How can i pass a password with this command? Or other suggestions...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

谁把谁当真 2024-11-11 08:55:24

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

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

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

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

Defaults requiretty

/etc/sudoers 中不存在该内容。如果没有,您将无法从脚本中使用 sudo。

You can add the following line to your sudoers file (/etc/sudoers)

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

This will basically let the rails_user user execute the service command as sudo, and the system won't ask you for a password.

rails_user should be replaced with whatever user that you are running your rails process under. And you should also make sure that

Defaults requiretty

is not present in your /etc/sudoers. If not you won't be able use sudo from a script.

得不到的就毁灭 2024-11-11 08:55:24

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

echo secretPasswd | sudo -S service squid3 restart

这意味着密码将是明确的,因此您可以将需要执行任务的用户添加到 sudoers(这会产生另一个安全问题)方式)。

You can try the sudo -S flag if available on you system (check man):

echo secretPasswd | sudo -S service squid3 restart

This means that the password will be in clear so you can add the user which needs to perform the task to the sudoers (which creates another security issue by the way).

流殇 2024-11-11 08:55:24

您的 sudo-A 开关吗?

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

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

Does your sudo have a -A switch?

-A
Normally, if sudo requires a password, it will read it from the current terminal. If the -A (askpass) option is specified, a helper program is executed to read the user's password and output the password to the standard output. If the SUDO_ASKPASS environment variable is set, it specifies the path to the helper program. Otherwise, the value specified by the askpass option in sudoers(5) is used.

I wouldn't recommend having the password available in any way to your web server processes though so you'd want to use the sudoers file.

陌路黄昏 2024-11-11 08:55:24

您可以使用 expect 方法 来捕获密码提示并发送密码。但是,最好使用 /etc/sudoers 中的 NOPASSWD 选项允许 Rails 用户无需密码即可访问服务命令。

You can use the expect method to catch the password prompt and send the password. However, it might be a better idea to allow your Rails user access to the service command without a password using the NOPASSWD option in /etc/sudoers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文