【问题标题】:Ruby SFTP returns "Net::SSH::Disconnect: disconnected: Failed to read binary packet data! (2)"Ruby SFTP 返回“Net::SSH::Disconnect: disconnected: Failed to read binary packet data!(2)”
【发布时间】:2012-10-02 13:38:58
【问题描述】:

我在 ruby​​ 1.9.3 中有这个:

Net::SFTP.start(ENV['SFTP_HOST'], ENV['SFTP_USERNAME'], password: ENV['SFTP_PASSWORD'], key_data: [ENV['SFTP_KEY']], keys_only: true) do |sftp|
  sftp.upload!(StringIO.new("testing"), "/text.txt")
end

它似乎正确地执行了身份验证步骤(我可以列出目录等中的文件)但是当我执行上面的 upload! 命令时,它会返回:

Net::SSH::Disconnect: disconnected: Failed to read binary packet data! (2)
from /Users/barmstrong/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/net-ssh-2.5.2/lib/net/ssh/transport/session.rb:176:in `block in poll_message'
from /Users/barmstrong/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/net-ssh-2.5.2/lib/net/ssh/transport/session.rb:166:in `loop'
from /Users/barmstrong/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/net-ssh-2.5.2/lib/net/ssh/transport/session.rb:166:in `poll_message'
from /Users/barmstrong/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/net-ssh-2.5.2/lib/net/ssh/connection/session.rb:451:in `dispatch_incoming_packets'
from /Users/barmstrong/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/net-ssh-2.5.2/lib/net/ssh/connection/session.rb:213:in `preprocess'
from /Users/barmstrong/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/net-ssh-2.5.2/lib/net/ssh/connection/session.rb:197:in `process'
from /Users/barmstrong/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/net-ssh-2.5.2/lib/net/ssh/connection/session.rb:161:in `block in loop'
from /Users/barmstrong/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/net-ssh-2.5.2/lib/net/ssh/connection/session.rb:161:in `loop'
from /Users/barmstrong/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/net-ssh-2.5.2/lib/net/ssh/connection/session.rb:161:in `loop'
from /Users/barmstrong/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/net-sftp-2.0.5/lib/net/sftp/session.rb:802:in `loop'
from /Users/barmstrong/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/net-sftp-2.0.5/lib/net/sftp/operations/upload.rb:195:in `wait'
from /Users/barmstrong/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/net-sftp-2.0.5/lib/net/sftp/session.rb:103:in `upload!'

我也试过

    # open and write to a pseudo-IO for a remote file
    sftp.file.open("/test.txt", "wb") do |f|
      f.puts "testing"
    end

尝试编写二进制文件,但没有成功。

有什么想法吗?谢谢!

【问题讨论】:

  • SFTP 服务器上的日志中有任何内容吗?它在本地工作吗?
  • 不幸的是,我无法访问服务器上的日志。但是,当我使用相同的凭据连接 Transmit(Mac 上的 FTP 客户端)时,上传工作正常。感谢您的观看!

标签: ruby ssh ftp sftp net-sftp


【解决方案1】:

好吧,我找到了一个解决方案,但我不知道它为什么有效。

只是在玩,我在upload! 之前添加了sftp.dir.foreach("/") {|e| puts e.name },它起作用了!

所以现在看起来像这样。

Net::SFTP.start(ENV['SFTP_HOST'], ENV['SFTP_USERNAME'], password: ENV['SFTP_PASSWORD'], key_data: [ENV['SFTP_KEY']], keys_only: true) do |sftp|
  sftp.dir.foreach("/") {}
  sftp.upload!(StringIO.new("testing"), "/text.txt")
end

执行dir 不应该有任何效果,但出于某种原因它确实有。如果有人对此有一些见解,我会很好奇。谢谢!

顺便说一句,ftp 服务器将自己标识为“SSH-2.0-Maverick_SSHD”。

【讨论】:

  • 谢谢布赖恩。我遇到了完全相同的问题,无法找到解决方案!这行得通。我也想不通为什么。我最好的猜测是,它与远程服务器如何处理会话有关。在我的情况下,完全相同的代码适用于 5 台服务器中的 4 台(服务器在供应商一方,每个供应商都有自己的风格)。
猜你喜欢
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多