如何修复 "elasticsearch.exceptions.AuthenticationException: ... missing authentication token for REST request"?
How to fix "elasticsearch.exceptions.AuthenticationException: ... missing authentication token for REST request"?
我正在研究使用 ElasticSearch 数据库来存储我从网上提取的数据。但是,当我尝试为数据库中的数据编制索引时收到错误消息。
这是我创建和索引数据的代码:
es = Elasticsearch()
es.index(index='weather', doc_type='data', body=doc)
然而,当我 运行 这个程序时,第二行导致错误,这里是完整的回溯:
Traceback (most recent call last):
File "weatherScraper.py", line 79, in <module>
main()
File "weatherScraper.py", line 73, in main
es.index(index='weather', doc_type='data', body=doc)
File "/home/alec/.local/lib/python2.7/site-packages/elasticsearch/client/utils.py", line 73, in _wrapped
return func(*args, params=params, **kwargs)
File "/home/alec/.local/lib/python2.7/site-packages/elasticsearch/client/__init__.py", line 298, in index
_make_path(index, doc_type, id), params=params, body=body)
File "/home/alec/.local/lib/python2.7/site-packages/elasticsearch/transport.py", line 312, in perform_request
status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
File "/home/alec/.local/lib/python2.7/site-packages/elasticsearch/connection/http_urllib3.py", line 128, in perform_request
self._raise_error(response.status, raw_data)
File "/home/alec/.local/lib/python2.7/site-packages/elasticsearch/connection/base.py", line 125, in _raise_error
raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
elasticsearch.exceptions.AuthenticationException: TransportError(401, u'security_exception', u'missing authentication token for REST request [/weather/data]')
''missing authentication token' 表示您需要先进行身份验证才能与此 Elasticsearch 实例通信。要索引文档,用户必须具有写入权限。您可以像这样在 URL 中包含用户名和密码:http://user:password@hostname:port
例如,在 shell:
export ES_ENDPOINT="http://usernameWithWriteAccess:password@localhost:9200"
然后在python:
es = Elasticsearch(os.environ['ES_ENDPOINT'])
此外,如果您使用 Postman 工具执行此操作,例如:
转到授权选项卡,基本身份验证,在此处输入您通过单击 elasticsearch-setup-passwords.bat
收到的用户名和密码
创建 ElasticSearch 客户端时,可以将 HTTP 基本身份验证传递给 http_auth
参数:
client = Elasticsearch(
hosts=['localhost:5000'],
http_auth=('username', 'password'),
)
s = Search(using=client, index='something')
这假设您正在使用具有 http_auth
参数的基础 Urllib3HttpConnection
传输 class。
class elasticsearch.connection.Urllib3HttpConnection(host='localhost',
http_auth=None,
...,
**kwargs)
Default connection class using the urllib3 library and the http
protocol.
Parameters:
- http_auth – optional http auth information as either ‘:’ separated string or a tuple
对于 SSL 和其他身份验证参数,请参阅文档的 SSL and Authentication 部分:
from ssl import create_default_context
context = create_default_context(cafile="path/to/cert.pem")
es = Elasticsearch(
['localhost', 'otherhost'],
http_auth=('user', 'secret'),
scheme="https",
port=443,
ssl_context=context,
)
OS ubuntu
/usr/local/lib/python2.7/dist-packages/elasticsearch/connection/http_urllib3.py
http_auth=None, -> http_auth=('username', 'password'),
我正在研究使用 ElasticSearch 数据库来存储我从网上提取的数据。但是,当我尝试为数据库中的数据编制索引时收到错误消息。
这是我创建和索引数据的代码:
es = Elasticsearch()
es.index(index='weather', doc_type='data', body=doc)
然而,当我 运行 这个程序时,第二行导致错误,这里是完整的回溯:
Traceback (most recent call last):
File "weatherScraper.py", line 79, in <module>
main()
File "weatherScraper.py", line 73, in main
es.index(index='weather', doc_type='data', body=doc)
File "/home/alec/.local/lib/python2.7/site-packages/elasticsearch/client/utils.py", line 73, in _wrapped
return func(*args, params=params, **kwargs)
File "/home/alec/.local/lib/python2.7/site-packages/elasticsearch/client/__init__.py", line 298, in index
_make_path(index, doc_type, id), params=params, body=body)
File "/home/alec/.local/lib/python2.7/site-packages/elasticsearch/transport.py", line 312, in perform_request
status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
File "/home/alec/.local/lib/python2.7/site-packages/elasticsearch/connection/http_urllib3.py", line 128, in perform_request
self._raise_error(response.status, raw_data)
File "/home/alec/.local/lib/python2.7/site-packages/elasticsearch/connection/base.py", line 125, in _raise_error
raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
elasticsearch.exceptions.AuthenticationException: TransportError(401, u'security_exception', u'missing authentication token for REST request [/weather/data]')
''missing authentication token' 表示您需要先进行身份验证才能与此 Elasticsearch 实例通信。要索引文档,用户必须具有写入权限。您可以像这样在 URL 中包含用户名和密码:http://user:password@hostname:port
例如,在 shell:
export ES_ENDPOINT="http://usernameWithWriteAccess:password@localhost:9200"
然后在python:
es = Elasticsearch(os.environ['ES_ENDPOINT'])
此外,如果您使用 Postman 工具执行此操作,例如:
转到授权选项卡,基本身份验证,在此处输入您通过单击 elasticsearch-setup-passwords.bat
收到的用户名和密码创建 ElasticSearch 客户端时,可以将 HTTP 基本身份验证传递给 http_auth
参数:
client = Elasticsearch(
hosts=['localhost:5000'],
http_auth=('username', 'password'),
)
s = Search(using=client, index='something')
这假设您正在使用具有 http_auth
参数的基础 Urllib3HttpConnection
传输 class。
class elasticsearch.connection.Urllib3HttpConnection(host='localhost', http_auth=None, ..., **kwargs)
Default connection class using the urllib3 library and the http protocol.
Parameters:
- http_auth – optional http auth information as either ‘:’ separated string or a tuple
对于 SSL 和其他身份验证参数,请参阅文档的 SSL and Authentication 部分:
from ssl import create_default_context
context = create_default_context(cafile="path/to/cert.pem")
es = Elasticsearch(
['localhost', 'otherhost'],
http_auth=('user', 'secret'),
scheme="https",
port=443,
ssl_context=context,
)
OS ubuntu
/usr/local/lib/python2.7/dist-packages/elasticsearch/connection/http_urllib3.py
http_auth=None, -> http_auth=('username', 'password'),