r - 使用 R 和 RCurl 连接到 SFTP 的问题

标签 r sftp rcurl

我正在尝试连接到 SFTP 站点以提取数据。它曾经可以工作,但由于某种原因,它在几周前停止工作。 SFTP 的所有者说他们没有任何变化,我可以使用 WinSCP 轻松提取数据而不会出错。

protocol <- "sftp"
server <- "sftp.xxxx.net"
userpwd <- "user:password"
file <- "/public/bpus_dailytx.csv"
url <- paste0(protocol, "://", server, file)
data <- getURL(url = url, userpwd=userpwd, verbose = TRUE) 

当我运行它时,我现在得到以下信息:
*   Trying xxx.xx.xx.xxx...
* Connected to sftp.xxxx.net (xxx.xx.xx.xxx) port 22 (#0)
* SSH MD5 fingerprint: 34rh3ie93hhr39hhdik3
* SSH authentication methods available: publickey,keyboard-interactive
* Using SSH public key file '(nil)'
* Using SSH private key file ''
* SSH public key authentication failed: Unable to extract public key from private key file: Unable to open private key file
* No identity would match
* Authentication failure
* Closing connection 0
Error in function (type, msg, asError = TRUE)  : Authentication failure

它连接正常,但随后身份验证失败。任何想法可能会发生什么?同样,这段代码曾经可以工作,但有些东西已经改变了。除此以外,还有哪些其他方法可以尝试提取数据?

编辑:WinSCP 截图:
enter image description here
enter image description here

最佳答案

很难说为什么你的代码停止工作,因为我们没有足够的关于它工作时的配置信息(在你的机器上和服务器上)。

因为您的 key 文件不是 RCurl 的正确格式,我的主要假设是,尽管服务器人员说他们最后没有改变,但我认为他们删除了密码身份验证选项。那是因为您的代码仅尝试密码身份验证。如果密码身份验证仍然可用,输出中的一行将如下所示:
SSH authentication methods available: publickey,password,keyboard-interactive
正如您所指出的,现在是:
SSH authentication methods available: publickey,keyboard-interactive
因此,这里的解决方案是使用 PuTTYgen 将您的 key 文件从 PuTTY 转换为 OpenSSH 格式,然后使用以下指向新 key 文件的 RCurl 代码:

protocol <- "sftp"
server <- "sftp.xxxx.net"
file <- "/public/bpus_dailytx.csv"
url <- paste0(protocol, "://", server, file)

keypasswd <- "your_keypasswd"
ssh.private.keyfile = "your_path_to_keyfile"
username <- "your_username"

data <- getURL(url = url, keypasswd = keypasswd, ssh.private.keyfile = ssh.private.keyfile, username = username, verbose = TRUE)

我将特别感谢@Tensibai 的帮助。如果没有他们对 key 文件格式的洞察力,我会花费更长的时间来得出这个解决方案。

关于r - 使用 R 和 RCurl 连接到 SFTP 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57208270/

相关文章:

r - 用于显示表格的 Shiny 模块

node.js - Node 中用于下载和删除文件的 SFTP 模块

r - 在 RCurl 中创建 C 级文件句柄,用于写入下载的文件

r - R 函数中的 Magrittr 管道

r - 如何从雅虎(使用 Quantmod)获取 ETF 财务信息(例如 NAV)?

hadoop - putHDFS处理器中的Nifi错误:无法确定当前用户

java - 在 JSch 中使用 ChannelSftp 传输文件夹和子文件夹?

RCurl:在 Rgui 中显示进度表

RCurl::getURL 超出最大客户端数量

r - 防止 `knitr` 弹出绘图窗口