1

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

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

3 ответа3

2

Используйте -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
2

С 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 .

1

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

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