Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有AWS CLI的Bash-找不到凭据_Bash_Amazon Web Services_Aws Cli - Fatal编程技术网

带有AWS CLI的Bash-找不到凭据

带有AWS CLI的Bash-找不到凭据,bash,amazon-web-services,aws-cli,Bash,Amazon Web Services,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+

我有一个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):

谢谢你的帮助

sudo
$HOME
目录(因此
~
)更改为/root,并从环境中删除大多数bash变量,如AWS\u CONFIG\u文件。请确保您使用aws作为根用户或用户,不要混用

例如,确保您进行了
sudo aws配置
。试一试

sudo bash -c 'AWS_CONFIG_FILE=/root/.aws/config aws s3 sync s3://backup-test-s3 /s3-backup/test'

您可能更愿意删除脚本中的所有sudo,只需sudo脚本本身。

这不一定与原始问题相关,但我在谷歌搜索相关问题时发现了这一点,因此我将把它写下来,以防对其他人有所帮助。我在特定用户上设置了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

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

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


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

如果有人根据问题标题无意中发现此问题,请回答

我遇到了同样的问题,AWS CLI报告
无法定位凭据

我已经从我的
凭证
文件中删除了
[default]
凭证集,因为我没有使用它们,也不认为需要它们。看来是的

然后我对我的文件进行了如下改革,它成功了

[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

一个生锈的投稿人愚蠢而谨慎的尾巴:

我已经在脚本中定义了HOME变量,作为脚本构建平台时应该使用的位置

此变量重写了定义shell用户的
env
var
$HOME
。因此,AWS命令无法找到
~/.AWS/credentials
,因为
~
引用了错误的位置


我不想承认这一点,但我希望它能帮你节省一些时间。

如果你使用的是角色
.aws/config
文件,请确保你的配置文件格式正确。就我而言,我忘了把
角色\u arn=
放在arn前面。默认配置文件位于
.aws/credentials
文件中,包含iam标识的访问密钥id和秘密访问密钥

配置文件包含角色详细信息:

[profile myrole]
role_arn = arn:aws:iam::123456789012:role/My-Role
source_profile = default
mfa_serial = arn:aws:iam::987654321098:mfa/my-iam-identity
region=ap-southeast-2
您可以通过调用

aws sts get-caller-identity --profile myrole
如果您像我一样启用了MFA,则需要在提示时输入它

Enter MFA code for arn:aws:iam::987654321098:mfa/my-iam-identity:
{
    "UserId": "ARABCDEFGHIJKLMNOPQRST:botocore-session-15441234567",
    "Account": "123456789012",
    "Arn": "arn:aws:sts::123456789012:assumed-role/My-Role/botocore-session-15441234567"
}

今天在EC2上运行aws cli时遇到此错误。我的情况是,在运行
aws配置列表时,我可以获取凭据信息。但是,我在一个公司环境中运行,执行类似于aws kms decrypt
的操作需要
代理
。一旦我设置了代理,aws凭证信息就会消失

export HTTP_PROXY=aws-proxy-qa.cloud.myCompany.com:8099
export HTTPS_PROXY=aws-proxy-qa.cloud.myCompany.com:8099
事实证明,我还必须设置
NO_PROXY
,并在列表中设置ec2元数据地址
169.254.169.254
。此外,由于您应该通过s3端点,因此通常也应该在no_代理中包含
.amazonaws.com

export NO_PROXY=169.254.169.254,.amazonaws.com

我在尝试从根cron运行awscli命令时遇到了这个问题

由于凭据存储在$HOME/.aws/credentials中,并且我通过sudo初始化了aws cli,$HOME仍然是/HOME/user/。从cron运行时,$HOME是/root/,因此cron找不到该文件

修复方法是为特定的cron作业更改$HOME。例如:

00 12 * * * HOME=/home/user aws s3 sync s3://...

(可选方案包括从/home/user/to/root/移动、复制或符号链接.aws目录)

尝试使用aws命令添加sudo,如
sudo aws ec2命令
和是,如前所述,awscli需要使用sudo进行配置

在使用不同的aws配置文件时,通常会发生
找不到凭据
错误,并且当前终端无法识别当前配置文件的凭据

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

从AWS文档中的:

AWS CLI支持使用以下任意多个命名配置文件: 存储在配置和凭据文件中。您可以配置 使用aws配置的附加配置文件带有
--profile
选项, 或者通过向配置文件和凭据文件添加条目

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

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

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

aws ec2 describe-instances --profile user1
或将其导出到终端:

$ export AWS_PROFILE=user1

谢谢,你完全正确。。。这是问题的根源(使用sudo运行脚本,但将凭据指定为普通用户)。感谢VS代码远程容器中出现此问题:aws configure以root用户身份运行,但执行aws codeartifact登录的npm脚本无法访问~/.aws/credentialsfil
aws ec2 describe-instances --profile user1
$ export AWS_PROFILE=user1