首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby SFTP返回"Net::SSH::Disconnect: Disconnect: Failed to read binary packet data!(2)“

Ruby SFTP返回"Net::SSH::Disconnect: Disconnect: Failed to read binary packet data!(2)“
EN

Stack Overflow用户
提问于 2012-10-12 03:36:45
回答 1查看 2.6K关注 0票数 2

我在ruby 1.9.3中有这样的代码:

代码语言:javascript
复制
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!命令时,它将返回:

代码语言:javascript
复制
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!'

我也试过了

代码语言:javascript
复制
    # open and write to a pseudo-IO for a remote file
    sftp.file.open("/test.txt", "wb") do |f|
      f.puts "testing"
    end

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

有什么想法吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2012-10-12 09:42:33

好吧,我找到了一个解决方案,但我不知道为什么它会起作用。

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

所以现在看起来是这样的。

代码语言:javascript
复制
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“。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12847202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档