Мой интерфейс командной строки AWS не работал с sudo

#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 , он получит одинаковые учетные данные (что не так, как мы продемонстрировали).

Вы должны либо:

  1. настройте учетные данные AWS для пользователя root, запустив sudo -i , а затем aws configure из полностью инициализированного root сеанса, затем убедитесь, что все ваши скрипты используют полный корневой сеанс (используйте #!/bin/bash -l как shebang).
  2. Если ваша проблема вторая и вы не хотите выполнять сложное решение, предложенное в (1), вам следует настроить учетные данные AWS для каждого из пользователей.

Комментарии:

1. Он работал нормально, если я запускал ./test.sh и sudo ./test.sh , но если не работал, если я выполнял скрипт, запуская из Дженкинса.

2. Является ли пользователь сервером Jenkins, работающим под тем же пользователем, для которого вы настроили AWS?

3. Кстати, у Дженкинса есть несколько плагинов для поддержки операций AWS, возможно, было бы неплохо проверить их.

Ответ №3:

Вы можете сделать следующее:

 sudo cp -r /home/<username>/.aws /home/root
  

Теперь вы можете использовать те же учетные данные пользователя для root.