2016-10-19 74 views
0

工作,我有一个使用aws cli shell脚本,我的脚本将使用sudo执行(例如:sudo ./test.sh我的AWS CLI没有使用sudo

但我得到的消息:Unable to locate credentials. You can configure credentials by running "aws configure".

其实,我配置为sudo aws configureaws configure

我做错了什么? 请帮忙。 谢谢!

回答

1

AWS CLI在$HOME/.aws/credentials中配置了您的凭证。通常,当您使用sudo时,它不会更改$HOME环境变量的值,因此AWS凭证文件将在同一位置生成。您可以通过运行aws configure作为一个普通用户,键入一个键,然后运行sudo aws configure所以在这一点检查这一点,你就可以看到,默认值是,你只是把钥匙。

,您应该能够运行sudo aws <facility> <some-command>并且它可以正常工作 - AWS CLI将使用您当前用户的AWS凭证。我只是测试它来确保。

我怀疑问题在于您要么以强制会话初始化的方式调用您的脚本,例如bash -l--在这种情况下,AWS CLI将尝试使用root用户的凭据;或者您从您设置AWS凭据的用户以外的用户运行脚本,并且您期望因为您使用的是sudo,它将获得相同的凭据(这与我们演示的情况不同)。

您应该:

  1. 配置AWS凭据为root用户通过withing完全初始化root会话中运行sudo -i然后aws configure,然后确保所有的脚本使用全根会话(使用作为shebang的#!/bin/bash -l)。
  2. 如果您的问题是第二个问题,并且您不想执行(1)中建议的复杂解决方案,则应该为每个用户配置AWS凭证。
+0

它工作得很好,如果我跑'/ test.sh'和'须藤。/ test.sh',但如果如果我从詹金斯触发执行脚本没有工作。 –

+0

用户Jenkins服务器是否在您为AWS配置的相同用户下运行? – Guss

+0

顺便说一句 - 詹金斯有几个插件来支持AWS操作,所以检查它们可能是一个好主意。 – Guss

1

您可能必须使用-E运行sudo以保留由aws cli设置的环境变量。
sudo -E ./test.sh