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

时间:2019-03-27 11:58:49

标签: bash environment-variables aws-cli

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

我已经确认,当我从外壳程序设置环境变量并通过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配置列表时,得到以下输出

:~$ 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中使用export手动设置变量时得到的输出)

~$ 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 个答案:

答案 0 :(得分:0)

您的file="/path/to/accessKeys.csv"是Windows格式(带有\r)。
密钥已设置为*****j6YS\r

您可以将最后一行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}" )