Использование ожидаемого взаимодействия внутри bash-скрипта преждевременно завершает работу bash-скрипта - PullRequest
0 голосов
/ 05 февраля 2019

Когда я использую ожидаю взаимодействия внутри bash-скрипта, чтобы вручную запросить пароль root, он принимает пароль, поднимает пользователя root, но завершает работу, не завершив остальную частьсценарий bash.

Я переношу пользователей со старых машин CentOS на новые машины RHEL.У меня есть процесс для этого вручную, но я пытаюсь автоматизировать процесс.У меня большая часть этого работает, но для нескольких шагов требуются права root-уровня.Я пытаюсь использовать функцию ожидаемого взаимодействия из скрипта bash для выполнения команды su , чтобы гарантировать, что пароль root остается безопасным.

#!/bin/bash

elevate()
{
    echo 
    echo "You must be logged in as root to continue."
    echo "Press [Enter] to login as root."
    /usr/bin/expect -c 'expect "\n" { eval spawn su; interact }'
}

User=`whoami`
if [ $User != "root" ]
then
    elevate
fi

echo "script completed"

exit

Если я вошел в системуКогда я запускаю сценарий в качестве пользователя root, он никогда не выполняет функцию повышения, и я получаю ответ « script complete ».Если я вошел в систему как любой другой пользователь, функция elevate выполняется, я вручную ввожу пароль root, и сценарий завершается без предоставления ответа « script complete », но я все еще вошел в систему как rootпользователь.

1 Ответ

0 голосов
/ 06 февраля 2019

Если вы не являетесь пользователем root, su запрашивает пароль, затем запускает корневую оболочку.Теперь вы interact работаете с этой оболочкой.

Я вручную ввожу пароль root, и сценарий завершает работу без предоставления ответа «сценарий завершен», но я до сих порВы вошли в систему как пользователь root.

Я полагаю, что вы неправильно указали, что «сценарий завершается».Отметьте pstree -s $$ и держу пари, что вы видите ожидаемый процесс там.

Когда вы выйдете из этой корневой оболочки, процесс su завершится, вернется команда interact, скрипт expectвыйдет, функция elevate вернется, а затем вы увидите сообщение «выполнено».

...