Bash проверка на sudo -

Рейтинг: 1Ответов: 1Опубликовано: 17.02.2023

Есть кусок скрипта:

ssh_user=xxx
ssh_host=10.65.192.14

if [ "$USER" != "root" ]; then
    echo "Для выполнения скрипта нужны права sudo, запустите скрипт с правами суперпользователя"
fi

remuser=$(ssh -t "$ssh_user"@"$ssh_host" "sudo whoami")
echo "debug: $remuser"

if [ "$remuser" != "root" ]; then
    echo "[FAIL] Нет sudo на удаленном сервере $ssh_host"
    exit 1
fi
echo "[-OK-] Права sudo есть на сервере $ssh_host" 

Запускаю его под обычным пользователем, у xxx на хосте есть права sudo. Если запущу скрипт от sudo - проверка первым if проходим корректно. Вывод скрипта при запуске от обычного пользователя такой:

Для выполнения скрипта нужны права sudo, запустите скрипт с правами суперпользователя
Connection to 10.65.192.14 closed.
debug: root
[FAIL] Нет sudo на удаленном сервере 10.65.192.14

Вопрос: Почему первый if работает нормально, а второй if - root за root не считает?

Ответы

▲ 0

Как и сказал ipatev_nn, проблема была в ключе -t.

Команда в таком виде приехала "по наследству" из другого места скрипта, где выполнялось ssh -t user@host "sudo bash -c 'переменная с командами в многострок', которая была найдена в каком-то мануале, продебажена и работала в таком виде. В итоге, переписал переменную в 1 строку в виде: команда1 && команда2 && итд и уже скормил ssh user@host "sudo bash -c 'переменная в однострок'".

Спасибо за подсказку.