温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Error importing aws credentials while using sudo python3 but not with python3
boto debian python python-3.x sudo

python - 使用sudo python3而不是python3时导入AWS凭证时出错

发布于 2020-03-27 10:46:23

我是AWS CLI,Boto的初学者,并且正在从事IoT项目。最近遇到此错误,即如果我使用sudo python3并尝试连接到s3,则我的连接已通过身份验证。但是,如果我只使用python3,我就可以连接。任何想法为什么会这样?

如果我需要脚本的超级用户权限,以后会遇到错误吗?我现在正在通过USB连接使用Internet,并且需要superuser命令来运行我的代码。

debian@maraca:~$ sudo python3 
[sudo] password for debian: Python 3.5.3
(default, Sep 27 2018, 17:25:39) [GCC 6.3.0 20170516] on linux 
Type "help", "copyright", "credits" or "license" for more information.

>>> import boto

>>> s3 = boto.connect_s3()

Traceback (most recent call last):
File "<stdin>", line 1, in <module>

File "/usr/local/lib/python3.5/dist-packages/boto/__init__.py", line 141, in connect_s3

return S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs)

File "/usr/local/lib/python3.5/dist-packages/boto/s3/connection.py", line 194, in __init__

validate_certs=validate_certs, profile_name=profile_name)

File "/usr/local/lib/python3.5/dist-packages/boto/connection.py", line 569, in __init__

host, config, self.provider, self._required_auth_capability())

File "/usr/local/lib/python3.5/dist-packages/boto/auth.py", line 1021, in get_auth_handler

'Check your credentials' % (len(names), str(names)))

boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler'] Check your credentials



debian@maraca:~$ python3 
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux 
Type "help", "copyright", "credits" or "license" for more information.

>>> import boto

>>> s3 = boto.connect_s3()
>>>

查看更多

查看更多

提问者
utsav22g
被浏览
300
ankur singh 2019-07-11 21:47

好的,我想我已经找到问题了。我是对的,您的凭据位于〜/ .aws / config中,而不是〜/ .aws / credentials中?如果是这样,aws-cli将可以工作,但是由于该文件假定不包含敏感选项,因此boto将不会使用它们:

http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html http://boto.readthedocs.org/en/latest/boto_config_tut.html#details

这是我指的评论:

AWS CLI还将从配置文件读取凭证。如果要将所有配置文件设置保留在一个文件中,则可以。如果配置文件的两个位置都存在凭据(例如您使用aws configure更新配置文件的密钥),则凭据文件中的密钥将占优。

如果除AWS CLI之外还使用其中一种SDK,则可能会注意到其他警告(如果凭据未存储在其自己的文件中)。我将凭据作为〜/ .aws / config的一部分,并删除了〜/ .aws / credentials,并重现了您遇到的相同错误。

作为此修复程序的一部分,我要求使用--aws-region或AWS_REGION env变量提供有效的aws-region。我认为这足以使这种情况不再发生。