在Linux上的RStudio内建立ssh连接

Zek*_*eks 7 linux ssh r rstudio

我试图将文件从另一台计算机拉到Centos 6上的RStudio的R环境中

我先在普通R中尝试过,当我发行时

readLines(pipe( 'ssh root@X.X.X.X "cat /path/somefile.sh"' ))
Run Code Online (Sandbox Code Playgroud)

它正确地要求我输入我的ssh密码并读取内容.

但是,如果从RStudio执行相同的命令,我得到的是:

ssh_askpass: exec(rpostback-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(rpostback-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(rpostback-askpass): No such file or dire
Permission denied (publickey,gssapi-with-mic,password).
Run Code Online (Sandbox Code Playgroud)

我怀疑原因是因为rstudio on centos实际上使用了rstudio-server用户(并且gui是在浏览器中提供的).有谁知道如何从中正确访问ssh'd资源?

UPD:执行后

Sys.setenv(PATH = paste0(Sys.getenv('PATH'), ':/usr/lib/rstudio-server/bin/postback'))
Run Code Online (Sandbox Code Playgroud)

如下所示,它不会输出askpass错误,但它仍然无法正常工作.现在看来控制台正在等待命令无限期地执行

Ale*_*iev 5

rpostback-askpass是 RStudio 的一部分。/usr/lib/rstudio-server/bin/postback添加它的位置(在我的系统上)可能会有所帮助,PATH以便 ssh 可以找到它:

Sys.setenv(PATH = paste0(Sys.getenv('PATH'), ':/usr/lib/rstudio-server/bin/postback'))
Run Code Online (Sandbox Code Playgroud)

UPDATE RCurl具有scp通过 ssh 连接复制文件的功能。有关详细信息,请参阅此答案。如果您使用 RStudio 运行脚本,则可以使用其 API 通过隐藏输入以交互方式输入 ssh 密码:

pass <- .rs.askForPassword("password?")
Run Code Online (Sandbox Code Playgroud)

rstudioapi可以帮助确定脚本是否由 RStudio 启动。