0

我们正在尝试在计划在 linux 服务器上运行的 R 脚本中对 BigQuery 进行身份验证。我们有:

bigrquery::bq_auth(path = '~/path-to/credentials/our-creds.json')

当我在 R 中本地运行它时,我得到了这个提示

The bigrquery package is requesting access to your Google account.
Select a pre-authorised account or enter '0' to obtain a new token.
Press Esc/Ctrl + C to cancel.

1: myemail@gmail.com

Selection: 

当我们通过 在我们的 linux 服务器上运行它时Rscript our_script.R,我们得到以下错误:

Error: Can't get Google credentials.
Are you running bigrquery in a non-interactive session? Consider:
  * Call `bq_auth()` directly with all necessary specifics.
Execution halted

当我们在我们的 linux 服务器上运行它时,通过R打开 R,然后手动运行代码行,我们得到:

> bigrquery::bq_auth(path = '~/path-to/credentials/our-creds.json')
Waiting for authentication in browser...
Press Esc/Ctrl + C to abort

并且因为我们没有浏览器进行身份验证(我们通过 SSH 连接到位于 GCP 上的 linux 服务器),所以终端挂在这里......

怎样才能在服务器上成功认证,这样Rscript out_script.R才能成功运行呢?

编辑:我们服务器上的信息:

在此处输入图像描述

让我知道我是否可以分享其他信息来帮助解决这个问题。我们还尝试添加myemail@gmail.com到 bigrquery 的email参数,但这并没有解决问题。我看到有一个token参数,也许我们可以在某个地方手动添加一个令牌?这一切都非常令人沮丧,因为我认为使用服务帐户密钥应该可以解决此问题,但我们指向具有 bigquery 权限的有效服务帐户密钥,但仍然无法在服务器上进行身份验证。

4

1 回答 1

1

RStudio 社区论坛中也提出了同样的问题。在此处发布讨论以供后代使用。

一些故障排除思路:

... R 脚本计划在 linux 服务器上运行 ....

每当我听到“scheduled”时,我会想到“cron”,当我听到“cron”时,我会想到“路径问题”。因此,在服务器/调度上下文中,我建议您进行非常迂腐的检查,以确保您真正了解工作目录是什么、用户是谁以及路径是否解析为您想要的。

但是,此服务帐户令牌在本地交互式会话中似乎对您不起作用这一事实表明该文件有问题。从历史上看,人们曾尝试使用其他 JSON 文件,例如用于 OAuth 客户端的 JSON,就好像它是用于服务帐户的 JSON,由于显而易见的原因,这不起作用。

您可以通过使用此处描述的 gargle verbosity 选项更深入地了解这是如何失败并落入交互式身份验证的:

gargle.r-lib.org -漱口水认证疑难解答- 漱口水

如果您还没有找到它(为了其他读者的利益),这里是如何设置非交互式身份验证的一般概述:

gargle.r-lib.org -非交互式身份验证- 漱口水

正如@Canovic 在同一论坛帖子中所承认的那样该问题是由于该bq_auth()功能中使用的服务帐户密钥错误造成的。

于 2021-10-28T20:46:06.897 回答