按教程连接树莓派至Google Cloud IoT Core遇权限及连接拒绝问题
解决树莓派连接Google Cloud IoT Core的两个核心问题
我来帮你一步步排查遇到的这两个问题,先搞定gcloud组件的权限报错,再解决MQTT连接被拒绝的核心问题:
一、解决gcloud components repositories add权限错误
那个自定义组件仓库是早期Cloud IoT的专属组件源,现在官方已经把IoT相关功能整合到标准gcloud组件里了,你完全可以跳过添加自定义仓库的步骤,直接安装官方支持的IoT组件:
- 执行命令:
sudo gcloud components install cloudiot - 如果还是提示权限不足,检查你的gcloud账号是否拥有当前GCP项目的
Editor、Owner或者Cloud IoT Admin角色:- 登录GCP控制台,进入IAM与管理员页面
- 找到你的账号
tiosahelal@gmail.com,点击编辑按钮 - 添加
Cloud IoT Admin角色(或者更宽泛的Editor角色),保存后重新执行安装命令
二、解决MQTT连接被拒绝(错误码5)
错误码5: The connection was refused.在MQTT协议里对应的是未授权访问,这是最常见的连接失败原因,按以下步骤排查:
- 检查设备认证信息:
- 确认你创建设备时生成的私钥(RSA/ES256)已经正确上传到Cloud IoT Core的设备详情页
- 运行CPUTemp代码时,
private_key_file参数指向的本地私钥路径必须完全正确,不能有拼写错误或者路径错误
- 验证MQTT客户端ID格式:
客户端ID必须严格遵循格式:projects/[你的项目ID]/locations/[区域]/registries/[注册表ID]/devices/[设备ID],任何拼写错误(比如区域写错、项目ID少字符)都会直接导致认证失败 - 检查设备连接权限:
进入Cloud IoT Core的设备详情页,确认设备的连接协议已启用MQTT(默认是允许的,但可以再确认一遍) - 测试网络连通性:
在树莓派上执行telnet mqtt.googleapis.com 8883,如果无法连通,说明网络防火墙拦截了8883端口(Cloud IoT Core的MQTT TLS端口),需要检查家庭/公司防火墙设置,或者切换到可以访问公网的网络 - 核对代码参数:
代码里的项目ID、区域、注册表ID、设备ID必须和GCP控制台里的完全一致,比如区域是us-central1就不能写成us-central,大小写也要注意
按照以上步骤排查,基本就能解决连接被拒绝的问题。
内容的提问来源于stack exchange,提问作者Agustio Sahela




