Перезапустить nginx без sudo? - PullRequest
15 голосов
/ 10 июня 2010

Так что я хочу иметь возможность ограничиться: развернуть без ввода каких-либо паролей. Я настроил все закрытые ключи, чтобы я мог нормально добраться до удаленных серверов, и теперь я использую svn поверх ssh, поэтому паролей там нет.

У меня есть еще одна проблема, мне нужно перезапустить nginx. Прямо сейчас у меня есть sudo /etc/init.d/nginx reload. Это проблема, потому что она использует пароль Capistrano, который я только что удалил, потому что я использую ключи. Любые идеи о том, как перезапустить nginx без пароля?

Ответы [ 3 ]

42 голосов
/ 30 января 2012

Я просто провел хороший час, глядя на символы sudoer и тому подобное, пытаясь решить именно эту проблему.По правде говоря, все, что вам действительно нужно, это исполняемый скрипт root, который перезапускает nginx.

Добавьте это в файл / etc / sudoers

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

Записывайте скрипт как root

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

Сделать исполняемый скрипт

Test.

sudo /path/to/script
13 голосов
/ 13 июля 2017

Существует лучший ответ о переполнении стека , который не требует написания собственного скрипта:

Лучше всего использовать /etc/sudoers.d/myuser

Папка /etc/sudoers.d/ может содержать несколько файлов, которые позволяют пользователям вызывать вещи с помощью sudo, не будучи root.

Файл обычно содержит пользователя и список команд, которые пользователь может работать без указания пароля.

Инструкция:

Во всех командах замените myuser на имя вашего пользователя, которое вы хотите использовать для перезапуска nginx без sudo.

  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 . Он спросит, где вы хотите сохранить, просто нажмите введите , чтобы подтвердить значение по умолчанию. Затем выйдите из редактора с помощью ctrl + x .

Теперь вы можете перезапустить (и запустить, и остановить) nginx без пароля. Давайте попробуем.

  1. Открыть новый сеанс (в противном случае вас могут просто не попросить ввести пароль sudo, поскольку он не истек):

    $ ssh myusername@myserver
    
  2. Стоп nginx

    $ sudo /usr/sbin/service nginx stop
    
  3. Убедитесь, что nginx остановился, проверив ваш сайт или запустив ps aux | grep nginx

  4. Запустить nginx

    $ sudo /usr/sbin/service nginx start
    
  5. Убедитесь, что nginx запущен, проверив ваш сайт или запустив ps aux | grep nginx

PS: обязательно используйте sudo /usr/sbin/service nginx start|restart|stop, а не sudo service nginx start|restart|stop.

0 голосов
/ 19 июня 2018

Создайте грабли в Rails_App/lib/capistrano/tasks/nginx.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...