3

У меня есть несколько централизованных сценариев, которые устанавливают определенные части промежуточного программного обеспечения (например, JBoss-AS, JBoss-EWS и т.д.). Идея состоит в том, чтобы использовать ожидаемый написать сценарий, который запускает сценарий (который может содержать несколько команд и, если ..., то еще, а также структуры цикла) на другом сервере, под другим пользователем.

Что мне нужно, это сценарий ожидаемого, который выполняет что-то вроде этого:

central $ ssh <user>@<remote> "sudo local-script"

Я пытался передать вещи, как cat local-script | ssh -t <user>@<remote> sudo , но sudo этого не допустит. Когда я получаю вышеуказанную последовательность, то есть запускаю sudo local-script через канал ssh, тогда я могу использовать autoexpect для генерации ожидаемого файла, который работает (также такие вещи, как ssh -t <user>@<remote> sudo < cat local-script не работает

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

Поскольку большинству сценариев установки, которые мы используем, нужны права root, а поскольку вы не используете NOPASSWD для root по понятным причинам, возможно ли это и как?

3 ответа3

3

Создайте выделенную учетную запись на сервере, чтобы использовать ее для этой цели. Сконфигурируйте /etc/sudoers на сервере так, чтобы единственными командами, которые может выполнять выделенная учетная запись пользователя, были те, которые вы хотите. Также настройте /etc/sudoers на сервере, чтобы выделенной учетной записи пользователя не требовался пароль для использования sudo. Затем отправьте ssh на сервер в качестве выделенного пользователя и запустите sudo, чтобы выполнить нужные команды от имени пользователя root.

0

Разве вы не можете добавить "sudo" и пароль к тому, что передается по ssh? Я делал это раньше, когда ожидал интерфейс удаленного вождения.

0

Для прагматичного решения: вы можете использовать временный удаленный файл.

Ваш сценарий будет тогда

  1. scp файл сценария к удаленному /tmp/randomfilename .
  2. ssh -t user@remote sudo sh /tmp/randomfilename

По своей наивности это очевидная угроза безопасности, так как содержимое /tmp/randomfilename может быть изменено пользователем scp , но если это касается локальных операций, на практике это не должно беспокоить (если вы не доверяете локальному пользователь, но тогда у вас есть другие, большие проблемы, я считаю :-)).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .