无法让远程用户通过 RabbitMQ 成功进行身份验证
Failed to get a remote user to authenticate successfully with RabbitMQ
我在 Ubuntu 14.04 上安装了 RabbitMQ 3.6.9,我想用 pika 制作一个基本的生产者-消费者示例,但与 RabbitMQ 网站上的教程不同,我希望消费者能够在另一台机器上。
我知道我可以将 [{rabbit, [{loopback_users, []}]}].
添加到 rabbitmq.config 并避免所有身份验证问题,但我想在我的示例中包括连接的身份验证方面。
我首先添加了一个新用户:rabbitmqctl add_user user password
,然后我 运行 下面的脚本:
import pika
url = '10.0.0.1'
credentials = pika.PlainCredentials('user', 'password')
parameters = pika.ConnectionParameters(host=url, credentials=credentials)
connection = pika.BlockingConnection(parameters)
connection.close()
print 'Made it through!'
但是,我得到以下异常:
Traceback (most recent call last):
File "test.py", line 8, in <module>
connection = pika.BlockingConnection(parameters)
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 339, in __init__
self._process_io_for_connection_setup()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 374, in _process_io_for_connection_setup
self._open_error_result.is_ready)
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 410, in _flush_output
self._impl.ioloop.poll()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/select_connection.py", line 602, in poll
self._process_fd_events(fd_event_map, write_only)
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/select_connection.py", line 443, in _process_fd_events
handler(fileno, events, write_only=write_only)
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 364, in _handle_events
self._handle_read()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 407, in _handle_read
return self._handle_error(error)
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 338, in _handle_error
self._handle_disconnect()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 288, in _handle_disconnect
self._adapter_disconnect()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/select_connection.py", line 95, in _adapter_disconnect
super(SelectConnection, self)._adapter_disconnect()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 154, in _adapter_disconnect
self._check_state_on_disconnect()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 178, in _check_state_on_disconnect
raise exceptions.ProbableAccessDeniedError
pika.exceptions.ProbableAccessDeniedError
根据 pika 的来源,这意味着:"Client was disconnected at a connection stage indicating a probable denial of access to the specified virtual host",所以我想也许我应该添加一个 vhost 而不是使用默认的,所以我 运行 rabbitmqctl add_vhost testvhost
,重新启动了服务器,以及 运行 以下脚本:
import pika
url = '10.0.0.1'
vhost = 'testhvost'
credentials = pika.PlainCredentials('user', 'password')
parameters = pika.ConnectionParameters(host=url, virtual_host=vhost, credentials=credentials)
connection = pika.BlockingConnection(parameters)
connection.close()
print 'Made it through!'
但是我仍然遇到同样的异常。
我错过了什么?是否需要任何基本的 rabbitmq.config 文件才能让它工作?服务器是全新安装,因此目前没有加载配置文件。
您是否为该用户添加了访问虚拟主机的权限?
到默认虚拟主机:
rabbitmqctl set_permissions user ".*" ".*" ".*"
还有你新创建的:
rabbitmqctl set_permissions -p /testhvost user ".*" ".*" ".*"
我在 Ubuntu 14.04 上安装了 RabbitMQ 3.6.9,我想用 pika 制作一个基本的生产者-消费者示例,但与 RabbitMQ 网站上的教程不同,我希望消费者能够在另一台机器上。
我知道我可以将 [{rabbit, [{loopback_users, []}]}].
添加到 rabbitmq.config 并避免所有身份验证问题,但我想在我的示例中包括连接的身份验证方面。
我首先添加了一个新用户:rabbitmqctl add_user user password
,然后我 运行 下面的脚本:
import pika
url = '10.0.0.1'
credentials = pika.PlainCredentials('user', 'password')
parameters = pika.ConnectionParameters(host=url, credentials=credentials)
connection = pika.BlockingConnection(parameters)
connection.close()
print 'Made it through!'
但是,我得到以下异常:
Traceback (most recent call last):
File "test.py", line 8, in <module>
connection = pika.BlockingConnection(parameters)
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 339, in __init__
self._process_io_for_connection_setup()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 374, in _process_io_for_connection_setup
self._open_error_result.is_ready)
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 410, in _flush_output
self._impl.ioloop.poll()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/select_connection.py", line 602, in poll
self._process_fd_events(fd_event_map, write_only)
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/select_connection.py", line 443, in _process_fd_events
handler(fileno, events, write_only=write_only)
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 364, in _handle_events
self._handle_read()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 407, in _handle_read
return self._handle_error(error)
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 338, in _handle_error
self._handle_disconnect()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 288, in _handle_disconnect
self._adapter_disconnect()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/select_connection.py", line 95, in _adapter_disconnect
super(SelectConnection, self)._adapter_disconnect()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 154, in _adapter_disconnect
self._check_state_on_disconnect()
File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 178, in _check_state_on_disconnect
raise exceptions.ProbableAccessDeniedError
pika.exceptions.ProbableAccessDeniedError
根据 pika 的来源,这意味着:"Client was disconnected at a connection stage indicating a probable denial of access to the specified virtual host",所以我想也许我应该添加一个 vhost 而不是使用默认的,所以我 运行 rabbitmqctl add_vhost testvhost
,重新启动了服务器,以及 运行 以下脚本:
import pika
url = '10.0.0.1'
vhost = 'testhvost'
credentials = pika.PlainCredentials('user', 'password')
parameters = pika.ConnectionParameters(host=url, virtual_host=vhost, credentials=credentials)
connection = pika.BlockingConnection(parameters)
connection.close()
print 'Made it through!'
但是我仍然遇到同样的异常。
我错过了什么?是否需要任何基本的 rabbitmq.config 文件才能让它工作?服务器是全新安装,因此目前没有加载配置文件。
您是否为该用户添加了访问虚拟主机的权限?
到默认虚拟主机:
rabbitmqctl set_permissions user ".*" ".*" ".*"
还有你新创建的:
rabbitmqctl set_permissions -p /testhvost user ".*" ".*" ".*"