4

我正在使用 Net::SFTP 将文件上传到服务器。这是代码:

uri = URI.parse('sftp://host.org')
io = StringIO.new(csv_string)
timeout 120 do
  Net::SFTP.start(uri.host,ENV['SFTP_USER'],:password=>ENV['SFTP_PASS'],:port=>22)  do |sftp|
    sftp.upload(io, "/ftpguest/Medstro/" + file_name)
  end
end

当我运行代码时,它成功连接到主机并上传了一个具有正确文件名的零字节文件。然后它抛出这个异常:

lib/ruby/gems/2.3.0/gems/net-sftp-2.1.2/lib/net/sftp/session.rb:947:in `dispatch_request': no such request `403046400' (Net::SFTP::Exception)

文件内容没有上传,我只是得到一个零字节文件。我在谷歌上找不到任何东西。有谁知道如何解决这个问题?

仅供参考,我可以使用 WinSCP 上传文件。

4

2 回答 2

1

将 net-ssh gem 更新到 4.0.1 版解决了这个问题。

于 2017-02-16T21:08:08.187 回答
0

今天碰到这个。确保指定服务器使用的 sftp 版本。您可以version在 sftp 服务器的 shell 上运行以找出:

sftp> version
SFTP protocol version 3

然后将它传递给Net::SFTP#start这样的:

Net::SFTP.start(host, user, { password: password, port: port }, { version: version })
于 2021-01-12T23:00:37.683 回答