使用AWS CLI进行Bash - 无法找到凭据

Sma*_*ajl 11 bash aws-cli

我有一个shell脚本,应该从S3下载一些文件并安装一个ebs驱动器.但是,我总是以"无法找到凭据"结束.

我已使用aws configure命令指定了我的凭据,并且命令在shell脚本之外工作.有人可以告诉我(最好是详细的)如何使它工作?

这是我的剧本

#!/bin/bash

AWS_CONFIG_FILE="~/.aws/config"

echo $1

sudo mkfs -t ext4 $1
sudo mkdir /s3-backup-test
sudo chmod -R ugo+rw /s3-backup-test
sudo mount $1 /s3-backup-test

sudo aws s3 sync s3://backup-test-s3 /s3-backup/test

du -h /s3-backup-test
ipt (short version):
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Rtm*_*tmY 43

unable to locate credentials当使用不同的 aws 配置文件并且当前终端无法识别当前配置文件的凭证时,通常会发生该错误。

请注意,您不需要aws configure每次都填写所有凭据 - 您只需要引用一次配置的相关配置文件。

来自AWS 文档中的命名配置文件部分:

AWS CLI 支持使用存储在配置和凭证文件中的多个命名配置文件中的任何一个。您可以通过使用带有--profile选项的 aws configure 或通过向配置和凭证文件添加条目来配置其他配置文件。

以下示例显示了具有两个配置文件的凭据文件。当您运行不带配置文件的 CLI 命令时,将使用第一个 [默认值]。当您运行带有参数的 CLI 命令时,将使用第二个
--profile user1

~/.aws/credentials(Linux 和 Mac)或%USERPROFILE%\.aws\credentials(Windows):

[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[user1]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
Run Code Online (Sandbox Code Playgroud)

因此,通过或直接在文件中设置特定的命名配置文件(上例中的user1 )后,您可以选择特定的配置文件:aws configure~/.aws/credentials

aws ec2 describe-instances --profile user1
Run Code Online (Sandbox Code Playgroud)

或者将其导出到终端:

$ export AWS_PROFILE=user1
Run Code Online (Sandbox Code Playgroud)


meu*_*euh 18

sudo$HOME目录(因此~)更改为/ root,并从环境中删除大多数bash变量,如AWS_CONFIG_FILE.确保以root用户或用户身份使用aws进行所有操作,不要混用.

sudo aws configure例如,确保你做到了.并尝试

sudo bash -c 'AWS_CONFIG_FILE=/root/.aws/config aws s3 sync s3://backup-test-s3 /s3-backup/test'
Run Code Online (Sandbox Code Playgroud)

您可能更喜欢从脚本中删除所有sudo,并且只是sudo脚本本身.


Him*_*pta 12

虽然您的凭据和配置文件可能正确位于 ~/.aws 中,但您的用户帐户可能无法获取它。

运行此命令以查看您的凭据是否已设置:aws configure list

要设置凭据,请运行以下命令:aws configure然后输入在 ~/.aws/credentials 文件中指定的凭据。


Rem*_*tec 8

回答以防有人根据问题的标题偶然发现此问题。

我在 AWS CLI 报告的地方遇到了同样的问题unable to locate credentials

我已经[default]从我的credentials文件中删除了这组凭据,因为我没有使用它们并且认为不需要它们。似乎他们是。

然后我按如下方式修改了我的文件并且它起作用了......

[default]
aws_access_key_id=****
aws_secret_access_key=****
region=eu-west-2

[deployment-profile]
aws_access_key_id=****
aws_secret_access_key=****
region=eu-west-2
Run Code Online (Sandbox Code Playgroud)


Jos*_*din 7

这不一定与原始问题有关,但我在谷歌搜索相关问题时遇到了这个问题,所以我将把它写下来,以防它可以帮助其他人。我设置了aws特定用户,并使用 进行了测试sudo -H -u thatuser aws ...,但它不适用于安装在 Ubuntu 14.04 上的 awscli 1.2.9:

  % sudo -H -u thatuser aws configure list
        Name                    Value             Type    Location
        ----                    -----             ----    --------
     profile                <not set>             None    None
  access_key                <not set>             None    None
  secret_key                <not set>             None    None
      region                us-east-1      config_file    ~/.aws/config
Run Code Online (Sandbox Code Playgroud)

我不得不使用 升级它pip install awscli,它带来了较新版本的 awscli (1.11.93)、boto 和无数其他东西(awscli docutils botocore rsa s3transfer jmespath python-dateutil pyasn1 futures),但它导致事情开始工作适当地:

  % sudo -H -u thatuser aws configure list
        Name                    Value             Type    Location
        ----                    -----             ----    --------
     profile                <not set>             None    None
  access_key     ****************WXYZ shared-credentials-file
  secret_key     ****************wxyz shared-credentials-file
      region                us-east-1      config-file    ~/.aws/config
Run Code Online (Sandbox Code Playgroud)