在 Bash 脚本中设置环境变量以用于 AWS CLI



我正在尝试通过运行 bash 脚本来设置通过 Ubuntu 18.04 终端中的 AWS CLI 向 AWS 发出请求所需的环境变量,而不必在 shell 中使用导出手动设置我的环境变量。

我已经确认我正在使用的 AWS 凭证仍然处于活动状态,因为当我从 shell 设置环境变量时,它们也可以通过 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配置列表时,我得到以下输出

:~$ 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 配置列表获得输出(当我在 shell 中使用导出手动设置变量时,我得到的输出)

~$ 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

但这会产生签名不匹配错误。

任何帮助或指示将不胜感激。

您的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}" )

最新更新