我们试图在一个计划在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: 当我们通过Rscript our_script.R在linux服务器上运行这个程序时,我们会得到以下错误:
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当我们通过R在linux服务器上运行这个程序以打开R,然后手动运行代码行时,我们得到:
> bigrquery::bq_auth(path = '~/path-to/credentials/our-creds.json')
Waiting for authentication in browser...
Press Esc/Ctrl + C to abort而且,由于我们没有一个浏览器来进行身份验证(我们是生活在GCP上的linux服务器的SSH),所以终端挂在这里.
如何在服务器上成功地进行身份验证,以便Rscript out_script.R能够成功运行?
编辑:我们服务器上的信息:

让我知道,如果我可以分享更多的信息,以帮助这一点。此外,我们还尝试将myemail@gmail.com添加到bigrquery的email参数中,但这并没有解决问题。我看到有一个token参数,也许我们可以在某个地方手动添加一个令牌?这一切都非常令人沮丧,因为我认为使用服务帐户键应该解决这个问题,但是我们指向具有bigquery权限的有效服务帐户密钥,但仍然无法在服务器上进行身份验证。
发布于 2021-10-28 20:46:06
同样的问题在RStudio社区论坛上被问到了。在这里张贴讨论供后人使用。
一些疑难解答的想法: ..。R脚本计划在linux服务器上运行.每当我听到“预定”,我就会想到"cron",当我听到"cron“时,我就会想到”路径问题“。因此,在服务器/计划上下文中,我建议进行非常繁琐的检查,以确保您真正了解什么是工作目录,用户是谁,以及路径是否解析到您想要的内容。 但是,这个服务帐户令牌在本地交互会话中似乎对您不起作用,这表明文件有问题。历史上,人们试图使用其他JSON文件,比如用于OAuth客户端的JSON,就好像它是服务帐户的JSON,而服务帐户由于明显的原因而无法工作。 通过使用如下面所述的“漱口详细”选项,您可以更深入地了解这是如何失败的和如何进入交互式auth的: 漱口水故障排除 - gargle,如果您还没有找到它(并且为了其他读者的利益),下面是关于如何设置非交互式auth的一般概述: Ggle.r-lib.org- 非交互方式 - gargle
正如同一论坛线程中的@Canovice所承认的,这一问题是由于bq_auth()函数中使用的服务帐户密钥错误造成的。
https://stackoverflow.com/questions/69579301
复制相似问题