尝试使用 codebuild buildspec 中的 shell 脚本登录 AWS 跨账户时出现 codebuild 错误

codebuild errors while trying to login to AWS cross-account using a shell script inside codebuild buildspec

我在 账户 A 上的 codebuild buildspec 中使用 shell 脚本登录到 账户 B 并看到 te以下错误,但是当直接在 buildspec 文件中使用命令时,我能够成功登录到 Account B 错误详情

jq: error: Could not open file login.json: No such file or directory
jq: error: Could not open file login.json: No such file or directory
jq: error: Could not open file login.json: No such file or directory
An HTTP Client raised an unhandled exception: Invalid header value b'\r\r\r'

Auth.sh

echo  
 roleArn=
 aws sts assume-role --role-arn $roleArn --role-session-name testx > login.json
 GetAccess=$(jq '.Credentials.AccessKeyId' login.json)
 Access=$(echo "$GetAccess" | sed -e 's/^"//' -e 's/"$//')
 GetSecret=$(jq '.Credentials.SecretAccessKey' login.json)
 secret=$(echo "$GetSecret" | sed -e 's/^"//' -e 's/"$//')
 GetTOken=$(jq '.Credentials.SessionToken' login.json)
 token=$(echo "$GetTOken" | sed -e 's/^"//' -e 's/"$//')
 export AWS_ACCESS_KEY_ID=$Access
 export AWS_SECRET_ACCESS_KEY=$secret
 export AWS_SESSION_TOKEN=$token
 aws s3 ls

buildspec.yam

version: 0.2
phases:
  install:
    commands:
      - ls
  build:
    commands:
     - aws s3 cp s3://mybucket/auth.sh auth.sh
     - chmod a+x auth.sh
     - ./auth.sh "arn:aws:iam::xxxxx:role/roleToLogin"
     - ls
     - aws sts assume-role --role-arn "arn:aws:iam::xxxxx:role/roleToLogin"  --role-session-name testx > login.json
     - GetAccess=$(jq '.Credentials.AccessKeyId' login.json)
     - Access=$(echo "$GetAccess" | sed -e 's/^"//' -e 's/"$//')
     - GetSecret=$(jq '.Credentials.SecretAccessKey' login.json)
     - secret=$(echo "$GetSecret" | sed -e 's/^"//' -e 's/"$//')
     - GetTOken=$(jq '.Credentials.SessionToken' login.json)
     - token=$(echo "$GetTOken" | sed -e 's/^"//' -e 's/"$//')
     - export AWS_ACCESS_KEY_ID=$Access
     - export AWS_SECRET_ACCESS_KEY=$secret
     - export AWS_SESSION_TOKEN=$token
     - rm -f login.json
     - aws s3 ls
     
  post_build:
    commands:
      - echo test

我是不是漏了什么?

基于评论和聊天讨论。

问题是由于使用 Windows 创建 auth.sh。 Windows 向其中添加了一些 额外的白色字符 ,导致错误。

使用 dos2unix 工具 windows 文件格式转换为 linux 解决了问题。