我是aw cli,boto的初学者,并且正在从事物联网项目。最近遇到此错误,即如果我使用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()
>>>
答案 0 :(得分:0)
我将假设您使用的是凭证文件。如果您在sudo下运行python脚本,那么它将在root帐户下运行,并且不会访问您正在使用的用户下的凭据文件。
一种快速的测试方法是将凭据文件从您的用户帐户复制到根帐户。
供参考https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html
答案 1 :(得分:0)
好的,我想我已经找到问题了。我是对的,您的凭据位于〜/ .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。我认为这足以使这种情况不再发生。