#bash #environment-variables #aws-cli
#bash #переменные среды #aws-cli
Вопрос:
Я пытаюсь установить переменные среды, необходимые для отправки запросов в AWS через AWS CLI в терминале Ubuntu 18.04, запустив скрипт bash, вместо того, чтобы вручную устанавливать переменные среды с помощью экспорта в оболочке.
Я подтвердил, что учетные данные AWS, которые я использую, все еще активны, поскольку они работают, когда я устанавливаю переменные среды из командной строки, а также работают через файл учетных данных AWS. Итак, я полагаю, что, должно быть, что-то не так с тем, как я передаю значение переменной среды.
Я пробовал заключать в кавычки, но, поскольку я новичок в этом, я не знаю, куда идти дальше.
#!/bin/bash
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
file="/path/to/accessKeys.csv"
cnt=0
export AWS_DEFAULT_REGION=us-east-1
export AWS_DEFAULT_OUTPUT=text
while IFS=, read var1 var2
do
if [ $cnt = 1 ]
then
echo $cnt
export AWS_ACCESS_KEY_ID=$var1
export AWS_SECRET_ACCESS_KEY=$var2
fi
cnt=$(($cnt 1))
done < $file
когда я запускаю AWS configure list, я получаю следующий вывод
:~$ aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************C4JA env
env **********6YS
region us-east-1 env AWS_DEFAULT_REGION
Когда я запускаю env для просмотра переменных среды, AWS_SECRET_ACCESS_KEY кажется правильным, хотя вывод, который я ожидаю от AWS configure list (вывод, который я получаю, когда я вручную устанавливаю переменную с помощью экспорта в оболочке)
~$ aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************C4JA env
secret_key ****************j6YS env
region us-east-1 env AWS_DEFAULT_REGION
Вывод из AWS configure list | tr -d 'r'
:~$ aws configure list | tr -d 'r'
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************C4JA env
secret_key ****************6YS env
region us-east-1 env AWS_DEFAULT_REGION
но это приводит к ошибке SignatureDoesNotMatch.
Любая помощь или указания по этому вопросу были бы весьма признательны.
Комментарии:
1. Помогает ли это при запуске
aws configure list | tr -d 'r'
?2. Как вы запускаете скрипт? Вам понадобится
source
скрипт, чтобы иметь возможность устанавливать переменные среды в текущем сеансе командной строки.3. Да, я выбираю скрипт для запуска в текущей оболочке, и переменные среды отображаются после того, как я запустил скрипт.
4. С поиском все в порядке, но вы можете помочь будущим пользователям, добавив эту строку:
(return 0 2>/dev/null) || { printf "%sn" "Start in current shell with" " source $0" ; exit 1 ; }
5. при использовании
aws configure list | tr -d 'r'
результат выглядит почти корректно. (отредактирую вопрос, чтобы показать выходные данные) но я все еще получаю ошибку signature does not match при попытке запустить команды AWS CLI.
Ответ №1:
Ваш file="/path/to/accessKeys.csv"
файл находится в формате Windows (с r
).
Для секретного ключа было установлено значение *****j6YSr
.
Вы можете заменить последнюю строку done < $file
на
done < <(tr -d 'r' < "${file}" )
или получить только вторую строку с
done < <(sed -n '2s/r*//p' "${file}" )
Вам не нужен цикл
IFS=, read -d'' -r AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY < <(sed -n '2s/r*//p' "${file}" )
Комментарии:
1. Большое спасибо за это, работает отлично. Не хочу вас слишком беспокоить, но есть ли у вас какие-либо указания на то, где я мог бы прочитать, почему file находится в формате Windows, или как я могу это узнать? Еще раз спасибо за помощь.
2. Большинство файлов, создаваемых / редактируемых в Windows, имеют r, если вы не изменили настройки своего редактора. Вы можете использовать
dos2unix
илиtr -d 'r' < infputfile
для удаления символов или проверить с помощьюgrep -c "^M" file
(вставьте ^M как один символ с помощью CTRL-V CTRL-M). Когда это сработает, вы можете принять ответ.