#shell #aws-cli
#оболочка #aws-cli
Вопрос:
У меня есть сценарий оболочки, который использует aws cli
, мой сценарий будет выполнен с помощью sudo (например: sudo ./test.sh
)
Но я получил сообщение: Unable to locate credentials. You can configure credentials by running "aws configure".
На самом деле, я сделал конфигурацию для обоих sudo aws configure
и aws configure
Что я сделал не так? Пожалуйста, помогите. Спасибо!
Ответ №1:
Возможно, вам придется запускать sudo с помощью -E, чтобы сохранить переменные среды, установленные aws cli.
sudo -E ./test.sh
Ответ №2:
Интерфейс командной строки AWS настроил ваши учетные данные в $HOME/.aws/credentials
. Обычно при использовании sudo
значение $HOME
переменной среды не изменяется, поэтому файл учетных данных AWS будет сгенерирован в том же месте. Вы можете проверить это, запустив aws configure
как обычный пользователь, введя ключ, затем запустив sudo aws configure
, и вы сможете увидеть, что значением по умолчанию будет ключ, который вы только что ввели.
Итак, на этом этапе вы должны быть в состоянии запустить sudo aws <facility> <some-command>
, и он будет работать нормально — AWS CLI будет использовать учетные данные AWS вашего текущего пользователя. Я просто протестировал его, чтобы убедиться.
Я подозреваю, что проблема заключается в том, что вы либо вызываете свой скрипт таким образом, чтобы принудительно инициализировать сеанс, например, bash -l
— в этом случае AWS CLI попытается использовать учетные данные root
пользователя; или вы запускаете свой скрипт от пользователя, отличного от того, у которого вы настроили учетные данные AWS, и вы ожидаете, что, поскольку вы оба используете sudo
, он получит одинаковые учетные данные (что не так, как мы продемонстрировали).
Вы должны либо:
- настройте учетные данные AWS для пользователя root, запустив
sudo -i
, а затемaws configure
из полностью инициализированногоroot
сеанса, затем убедитесь, что все ваши скрипты используют полный корневой сеанс (используйте#!/bin/bash -l
как shebang). - Если ваша проблема вторая и вы не хотите выполнять сложное решение, предложенное в (1), вам следует настроить учетные данные AWS для каждого из пользователей.
Комментарии:
1. Он работал нормально, если я запускал
./test.sh
иsudo ./test.sh
, но если не работал, если я выполнял скрипт, запуская из Дженкинса.2. Является ли пользователь сервером Jenkins, работающим под тем же пользователем, для которого вы настроили AWS?
3. Кстати, у Дженкинса есть несколько плагинов для поддержки операций AWS, возможно, было бы неплохо проверить их.
Ответ №3:
Вы можете сделать следующее:
sudo cp -r /home/<username>/.aws /home/root
Теперь вы можете использовать те же учетные данные пользователя для root.