Как удаленно выполнить команду ssh команду sudo без пароля

Я не совсем уверен, чтобы назвать этот вопрос, но позвольте мне объяснить.

Ситуация: У меня есть сервер linux (debian based), который настроен на разрешение сеанса SSH пользователю «admin», но не «root» пользователя. Оба эти аккаунта связаны каким-то образом, потому что у них одинаковый пароль.

Во время сеанса SSH в качестве администратора для запуска команд требуется «sudo», если я не переключусь на «root» пользователя.

У меня есть некоторые услуги, по которым мне нужно запускать время от времени или даже при запуске системы. В настоящее время я использую механизм private / public key для команд удаленного запуска на сервере. Некоторые команды вводятся вручную, другие – это сценарии оболочки, которые я выполняю. В настоящее время сервер по-прежнему запрашивает пароль, когда команда использует sudo.

Вопрос: Как удаленный запуск в качестве пользователя «admin» без предоставления пароля? Можно ли использовать закрытый / открытый ключ для удовлетворения sudo? Или, возможно, даже способ запуска shell-скриптов как пользовательский «root»?

Возможно ли даже избежать ввода пароля с помощью sudo? Если нет, это другие альтернативы для такой ситуации, как моя?

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

например, в /etc/sudoers

 archemar ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.* 

это позволяет мне использовать

 sudo -u www-data /bin/rm -rf /var/www/log/upload.* 

как архемар без пароля.

Обратите внимание, что

 sudo -u www-data rm -rf /var/www/log/upload.* 

не будет работать (будет запрашивать пароль), поскольку rm отличается от /bin/rm .

Обязательно отредактируйте /etc/sudoers с помощью команды visudo .

Как только вы достигнете продвинутого уровня, вы можете захотеть иметь свои собственные файлы sudo в /etc/sudoers.d .

Самый простой способ – предоставить пароль от stdin если ваш sudo поддерживает это (ключ -S)

 ssh -t admin@remotehost "echo <yourpassword> |sudo -S <yourcommand>" 

Чтобы добавить к ответу Archemar, sudo запрашивает пароль пользователя, выполняющего sudo , а не пользователя, команда будет запущена как. Вы говорите, что учетные записи «admin» и «root» «связаны» и используют один и тот же пароль. Если вы пришли к такому выводу, исходя из того, что sudo принимает пароль для учетной записи «admin» (и пароль sudo принимает изменения при изменении пароля для «admin»), это нормальное поведение для sudo .

Если учетные записи связаны каким-то образом, нет смысла разрешать ssh для одного, а не для другого. Вот что я сделал бы вместо этого:

  • включить ssh для root, разрешая доступ только с помощью ssh-ключей, а не с паролем
  • создайте новый ключ, который будет использоваться только для вашей конкретной команды
  • поместите ключ и команду, которую необходимо выполнить в authorized_keys root, так что, как только будет установлено соединение с этим ключом, команда запускается.

Это безопасно, поскольку вызывающий объект не может иметь оболочку и не выполнять какую-либо другую команду (даже если он ее предоставляет).

Здесь вы можете увидеть пример: https://stackoverflow.com/questions/402615/how-to-restrict-ssh-users-to-a-predefined-set-of-commands-after-login с синтаксисом command= . Вы также можете сделать то же самое, вставив команду в сертификат, если вы используете сертификаты вместо ключей, или делаете это глобально, используя параметр конфигурации ForceCommand

См. http://larstobi.blogspot.com/2011/01/restrict-ssh-access-to-one-command-but.html для другого примера (который показывает, что вам нужно учитывать параметры вашей команды)