RabbitMQ - ACCESS_REFUSED - 登录被拒绝

Posted

技术标签:

【中文标题】RabbitMQ - ACCESS_REFUSED - 登录被拒绝【英文标题】:RabbitMQ - ACCESS_REFUSED - Login was refused 【发布时间】:2018-12-26 11:19:00 【问题描述】:

我正在使用rabbitmq-server 并使用一个用 Scala 编写的消费者从中获取消息。这一直很有效,但是自从我将 RabbitMQ 服务器从一个服务器迁移到另一个服务器后,尝试连接它时出现以下错误:

com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.

另外,rabbitmq-server 日志:

=INFO REPORT==== 18-Jul-2018::15:28:05 ===
accepting AMQP connection <0.7107.0> (127.0.0.1:42632 -> 127.0.0.1:5672)

=ERROR REPORT==== 18-Jul-2018::15:28:05 ===
Error on AMQP connection <0.7107.0> (127.0.0.1:42632 -> 127.0.0.1:5672, state: starting):
PLAIN login refused: user 'my_personal_user' - invalid credentials

=INFO REPORT==== 18-Jul-2018::15:28:05 ===
closing AMQP connection <0.7107.0> (127.0.0.1:42632 -> 127.0.0.1:5672)

我浏览了所有关于身份验证问题的 SO 问题,发现了以下线索:

我的凭据错误 我正在尝试与来自的guest 联系 远程 我的 RabbitMQ 版本与消费者不兼容

所有这些线索都没有帮助我。我的凭据很好,我没有使用 guest 进行连接,而是使用我创建的具有完全访问权限和管理员权限的特权用户,并且我的 RabbitMQ 版本在迁移过程中没有改变。

注意:我将我的 RabbitMQ 服务器从一个单独的服务器迁移到与我的消费者相同的服务器,所以现在消费者正在从本地主机获取。不知道后果,但我认为这可以帮助你们帮助我。

【问题讨论】:

使用rabbitmqctl authenticate_user 命令试试您的用户名 (my_personal_user) 和密码。该命令成功了吗? 确实有效,我成功验证了。 curl -i -u user:password http://localhost:15672/api/whoami 也可以。 您的应用程序中很可能有错误。使用 Wireshark 查看端口 5672 并查看您的应用程序正在发送哪些凭据。 我使用了一个用 Scala 编写的消费者和一个用 Node.js 编写的生产者。两者都在我的旧服务器上工作,并且都未能在新服务器上进行身份验证。我怀疑这是来自 RabbitMQ 本身.. 我会尝试监视端口 5672 以查看实际情况,谢谢您的提示。 【参考方案1】:

所以我在谷歌搜索解决方案时遇到了类似的问题,这就是我找到此页面的方式。我没有找到我的问题的直接答案,但我最终发现 rabbitmq 有 2 组不同的配置权限,它们并不完全重叠,在我的情况下,我有 0 组权限和 1 组权限另一组权限的管理员权限。如果您遇到类似的情况,我会很高兴。

看到代码会让2套权限赚更多,但首先是一些背景上下文:

我的 RMQ 托管在 Kubernetes 上,其中的东西是短暂的,我需要一些用户名和密码来预装一个新的 rabbitmq 实例,在 Kubernetes 中,有一个选项可以在第一次启动时注入预配置的代理定义。 (当我说代理定义时,我指的是管理 Web GUI 中的那个位置,有一个选项可以导入和导出代理定义 AKA 备份或替换您的 RMQ 实时配置。)

这是我的配置的简化版本,其中删除了敏感内容:


  "vhosts": [
      "name":"/"
  ],
  "policies": [
     
      "name": "ha",
      "vhost": "/",
      "pattern": ".*",
      "definition":  
        "ha-mode": "all",
        "ha-sync-mode": "automatic",
        "ha-sync-batch-size": 2
      
    
  ],
  "users": [
    
      "name": "guest",
      "password": "guest",
      "tags": "management"
    ,
    
      "name": "admin",
      "password": "PASSWORD",
      "tags": "administrator"
    
  ],
  "permissions": [
    
      "user": "guest",
      "vhost": "/",
      "configure": "^$",
      "write": "^$",
      "read": "^$"
    ,
    
      "user": "admin",
      "vhost": "/",
      "configure": ".*",
      "write": ".*",
      "read": ".*"
    
  ]

好的,所以当我最初看到 tags 属性时,我假设为任意值,我将在其中放置一个自我记录标签,这相当于“”,这导致我对 Web 管理 GUI/REST 的权限为 0 API,而在下面我拥有所有“。*”,因此该部分具有完全的管理员权限。这对我来说真的很困惑,因为(我收到一条错误消息,说我提供了无效的凭据,但凭据是正确的,我只是没有访问权限。)

如果不是这样,那么还有一个配置,访客默认只能访问本地主机,但您可以覆盖它。

【讨论】:

以上是关于RabbitMQ - ACCESS_REFUSED - 登录被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ异常:ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN.

ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN

如何在nodejs中验证rabbitmq?

连接rabbitmq,芹菜和django时出现通道错误

Celery-Beat:ACCESS_REFUSED - 使用身份验证机制 AMQPLAIN 拒绝登录

ACCESS_REFUSED - 使用身份验证机制 AMQPLAIN 拒绝登录。有关详细信息,请参阅代理日志文件