没有sudo重启nginx?

问题描述 投票:15回答:3

所以我希望能够限制:部署而无需输入任何密码。我已经设置了所有私钥,所以我可以很好地到达远程服务器,现在我在ssh上使用svn,所以没有密码。

我有最后一个问题,我需要能够重启nginx。现在我有sudo /etc/init.d/nginx reload。这是一个问题b / c它使用capistrano密码,我刚刚删除的那个b / c我正在使用密钥。有关如何重新启动nginx的任何想法吗?

nginx deployment capistrano
3个回答
42
投票

我花了一个小时看着sudoer通配符等试图解决这个确切的问题。实际上,您真正需要的是一个重新启动nginx的根可执行脚本。

将其添加到/ etc / sudoers文件中

username hostname ALL=NOPASSWD: /path/to/script

以root身份编写脚本

#! /bin/bash
/bin/kill -HUP `cat /var/run/nginx.pid`

使脚本可执行

测试。

sudo /path/to/script

13
投票

有一个better answer on Stack Overflow不涉及编写自定义脚本:

最佳做法是使用/etc/sudoers.d/myuser

/etc/sudoers.d/文件夹可以包含多个文件,允许用户使用sudo调用内容而不是root。

该文件通常包含用户和用户无需指定密码即可运行的命令列表。

说明:

在所有命令中,将myuser替换为您要用于在没有sudo的情况下重新启动nginx的用户名。

  1. 为您的用户打开sudoers文件: $ sudo visudo -f /etc/sudoers.d/myuser
  2. 编辑将开放。在那里粘贴以下行。这将允许该用户运行nginx启动,重启和停止: myusername ALL=(ALL) NOPASSWD: /usr/sbin/service nginx start,/usr/sbin/service nginx stop,/usr/sbin/service nginx restart
  3. 通过按ctrl + o保存。它会询问您要保存的位置,只需按Enter确认默认值即可。然后用ctrl + x退出编辑器。

现在你可以在没有密码的情况下重启(并启动和停止)nginx。我们来试试吧。

  1. 打开新会话(否则,您可能根本没有被要求提供sudo密码,因为它没有超时): $ ssh myusername@myserver
  2. 停止nginx $ sudo /usr/sbin/service nginx stop
  3. 通过检查您的网站或运行ps aux | grep nginx确认nginx已停止
  4. 启动nginx $ sudo /usr/sbin/service nginx start
  5. 通过检查您的网站或运行ps aux | grep nginx确认nginx已启动

PS:确保使用sudo /usr/sbin/service nginx start|restart|stop,而不是sudo service nginx start|restart|stop


0
投票

Rails_App/lib/capistrano/tasks/nginx.rake中创建一个rake任务并粘贴到代码下面。

namespace :nginx do
  %w(start stop restart reload).each do |command|
    desc "#{command.capitalize} Nginx"
    task command do
      on roles(:app) do
        execute :sudo, "service nginx #{command}"
      end
    end
  end
end

然后ssh到您的远程服务器并打开文件

  sudo vi /etc/sudoers

并粘贴此行(行%sudo ALL=(ALL:ALL) ALL后)

  deploy ALL=(ALL:ALL) NOPASSWD: /usr/sbin/service nginx *

或者,就像你的情况一样,

  deploy ALL=(ALL:ALL) NOPASSWD: /etc/init.d/nginx *

在这里,我假设您的部署用户是deploy

您也可以在此处添加其他命令,您无需输入密码。例如

  deploy ALL=(ALL:ALL) NOPASSWD: /usr/sbin/service nginx *, /etc/init.d/mysqld, /etc/init.d/apache2
© www.soinside.com 2019 - 2024. All rights reserved.