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

标签 ruby ssh ftp sftp net-sftp

我在 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.dir.foreach("/") {|e|将 e.name } 放在 upload! 之前,它成功了!

所以现在看起来像这样。

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”,这是值得的。

关于Ruby SFTP 返回 "Net::SSH::Disconnect: disconnected: Failed to read binary packet data! (2)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12847202/

相关文章:

MySQL gem 问题 - Mysql :Class 的未定义方法 `init'

Ruby:在将 proc 转换为 block 时提供参数

multithreading - 使用带有线程的 Net::ssh::perl 模块时出现段错误

python - 成功登录时 Paramiko 返回代码

python - 使用 Python 下载 zip 文件并将其写入磁盘是否有特殊技巧?

java - FTPClient - 550 权限被拒绝

arrays - 制作 uniq 数组最快的方法是什么?

ruby-on-rails - rails :Send mail using mailer when controller finishes its execution

ssh - 为 GitHub 设置 SSH key

java - 跟踪 window.open() 方法打开的窗口上的用户 Activity