Выполнить удаленную команду после sudo - su другого пользователя в Rundeck
Я новичок в Rundeck и полностью удивлен этим, и я пытаюсь выполнить работу, и мой сценарий подробно описан ниже:
Для Rundeck настроена аутентификация по протоколу ssh без аутентификации между узлом Server (сервер rundeck) и узлом Target (удаленный хост Solaris) для пользователя "master".
В узле Target я хочу выполнить скрипт
/app/acme/stopApp.sh
с пользователемappmanager
,Обычно, когда мне нужно запустить скрипт выше, я вручную продолжаю:
ssh master@server
sudo su - appmanager
или просто
ssh -t master@server
sudo su - appmanager
работает без пароля и наконец запускается (как appmanager)
/app/acme/stopApp.sh
Но я не знаю, как я могу воспроизвести эти шаги, используя Rundeck. В некоторых предыдущих сообщениях я читал, что для каждой рабочей строки rundeck использует новое ssh-соединение, поэтому рабочий процесс ниже всегда терпит неудачу для меня с сообщениями:
sudo: отсутствует tty и не задана программа askpass Удаленная команда завершилась неудачно с состоянием выхода 1
Может ли кто-нибудь помочь мне с этим вопросом?
Без этой функциональности я не смог бы ввести немного DevOps в моем отделе.:-D
Я прочитал руководство пользователя и руководство администратора, но не смог найти ни простого примера на этом форуме.
Я буду признателен за вашу помощь.
Rundeck версия 1.4
2 ответа
Хотя ваш логин ssh работает без пароля, вам также необходимо настроить sudo на целевом сервере, чтобы он не требовал пароля.
Поскольку вам нужно, чтобы мастер- пользователь мог выполнять команды от имени пользователя appmanager, вы можете полностью справиться с этим с помощью sudo. В /etc/sudoers
на Target, добавьте:
master ALL=(appmanager) NOPASSWD: ALL
Тогда ваша команда ssh становится:
ssh -t master@server 'sudo -u appmanager /app/acme/stopApp.sh'
Если вам нужна настройка среды, которая обычно обрабатывается оболочкой входа в appmanager, вам нужно явно указать эту настройку. (И я бы сказал, что настройка среды развертывания в любом случае не должна ограничиваться оболочкой входа).
Более подробную информацию о том, как позволить одному пользователю запускать команды от имени другого пользователя, можно найти в ответе ServerFault и на странице руководства sudoers, которая намного плотнее.
sudo su - appmanager
Пытается открыть оболочку входа в систему, и поэтому хочет реальный терминал. Удалите "-", чтобы избежать этого поведения. В конце концов, ваша команда будет выглядеть
sudo su -c /app/acme/stopApp.sh appmanager