Как предоставить пароль непосредственно к sudo su -<someuser> в сценариях оболочки </someuser>

573
raamsaara

Я получил требование для автоматизации в сценарии оболочки, для sudo su -<someuser>которого запрашивает пароль.

Как предоставить пароль непосредственно для сценариев оболочки sudo в оболочке для серверов IBM AIX. Я пытался с echo <password> | sudo su -<someuser>его помощью не работает. пожалуйста, помогите в этом.

0

3 ответа на вопрос

1
chloesoe

использование -S

man sudo:

-S, --stdin Записать подсказку к стандартной ошибке и прочитать пароль из стандартного ввода вместо использования терминального устройства. За паролем должен следовать символ новой строки.

так что вы можете использовать:

echo <myPassword> | sudo -S su <someuser>

Изменить: это выше не работает на тестовой Ubuntu. Похоже, вторая команда "su" - это быстро после запроса пароля.

Я сделал обходной путь, чтобы подождать секунду, чтобы эхо-пароль мог быть заполнен, и затем второй sudo сможет запустить sudo su - foobar:

echo "password" | sudo -S sleep 1 && sudo su - foobar 
В моем Debian `su` выходит. Однако `sudo su -` вызывается сразу после работы благодаря кэшированным учетным данным. Это может быть обходной путь, если вы можете положиться на это поведение. Kamil Maciorowski 5 лет назад 0
это не работает. raamsaara 5 лет назад 0
@raamsaara: что именно не работает? вы получили ошибку? тем временем я отредактировал свой ответ, чтобы добавить обходной путь, который работал на моей машине. chloesoe 5 лет назад 0
1
Kamil Maciorowski

С expect. Команда заглушки может быть такой:

expect -c ' log_user 0 spawn /usr/bin/sudo su - someuser expect "*: " send "thepassword\n" interact ' 

Смотрите этот ответ на аналогичный вопрос.


Другой подход с sudo -A.

  1. Создайте файл, скажем pass.
  2. Сделайте файл доступен только для вас: chmod go-rwx pass.
  3. Сделайте его исполняемым для вас: chmod u+x pass
  4. Отредактируйте файл и сделайте его сценарием, который печатает ваш пароль:

    #!/bin/sh printf '%s\n' 'yourpassword' 
  5. Теперь вы можете сделать это:

    SUDO_ASKPASS="./pass" sudo -A su - someuser 

Примечание: в этом случае вы предоставляете пароль для sudo(не для su); использовать тот, который sudoхочет.

Благодарю . Но где я могу включить raamsaara 5 лет назад 0
@raamsaara В синтаксисе `su`. Ответ улучшился. Kamil Maciorowski 5 лет назад 0
1
danblack

Можете ли вы использовать :NOPASSWDопцию sudo, чтобы вам не нужен пароль. Как: %wheel ALL=(ALL) NOPASSWD: ALLв / etc / sudoers

Похожие вопросы