SSH连接下OAuth2认证失败,无法完成Firebase部署求助
问题描述
通过SSH连接到Firebase/GCP服务器后,执行部署命令:
sudo firebase deploy --only hosting
出现报错:
Failed to get Firebase project progectname. Please make sure the project exists and your account has permission to access it.
已尝试以下操作均无效:
- 执行
firebase login:跳转OAuth2登录地址,浏览器选谷歌账号授权后报错This site can’t be reached. localhost refused to connect. - 执行
firebase login --no-localhost:授权后出现Authorization Error Error 400: invalid_request - 执行
firebase login --reauth:与上述第一种情况报错一致 - 执行
firebase login --reauth --no-localhost:与上述第二种情况报错一致
解决建议
1. 禁用sudo执行Firebase命令
sudo会切换到root用户环境,而Firebase的认证信息通常存储在普通用户目录下,root用户无法读取。直接去掉sudo执行部署命令:
firebase deploy --only hosting
若提示权限不足,调整项目目录的读写权限给当前用户,不要用sudo绕过权限问题。
2. 手动配置服务账号认证
在本地电脑完成以下操作,再同步到SSH服务器:
- 登录Firebase控制台,进入目标项目
- 进入项目设置 > 服务账号,点击生成新的私钥,下载JSON密钥文件
- 将密钥文件上传到SSH服务器的指定目录(例如
~/firebase-service-key.json) - 在SSH服务器中设置环境变量指定密钥路径:
export GOOGLE_APPLICATION_CREDENTIALS="/home/your-username/firebase-service-key.json"
- 验证配置:执行
firebase projects:list,能列出目标项目即为配置成功,之后再执行部署命令。
3. 修正--no-localhost的登录流程
执行firebase login --no-localhost后,复制控制台输出的授权链接到本地浏览器打开,完成账号授权后,复制页面显示的授权代码,回到SSH服务器的控制台粘贴该代码,完成登录(不要依赖自动跳转,服务器无本地浏览器环境)。
4. 清理缓存并重新初始化项目
在SSH服务器执行以下命令:
firebase logout rm -rf ~/.firebase firebase init hosting
初始化过程中重新选择目标项目,注意检查项目名称拼写(报错中的progectname可能存在拼写错误,需与Firebase控制台的项目名称完全一致)。
5. 确认账号权限
登录Firebase控制台的项目设置 > 用户和权限,确认你的谷歌账号拥有该项目的编辑者或所有者权限,避免因权限不足导致无法访问项目。
内容的提问来源于stack exchange,提问作者Yoni Tzafrir
相关产品推荐
相关产品推荐

