ruby - 连接到 SFTP 版本 5 时,Ruby 文件名损坏

标签 ruby automation sftp

在构建新的 ruby​​ 自动化脚本来处理来自 sftp 连接的文件时,我在提取文件名时遇到了问题。 使用这些相同的方法,我构建了自动 sftp 脚本,这些脚本正在积极使用并且没有遇到太多麻烦,但我似乎无法输出此 sftp 设置中文件的可用文件名。

我知道 sftp 连接很好,因为我能够上传文件,并且可以在路径/文件名中进行硬编码来下载文件。 我的问题似乎特别在于读取文件名。

使用典型的方法,我似乎只能得到看似文件对象的输出或大量包含文件名的困惑文本:

"#<Net::SFTP::Protocol::V04::Name:0x4f6d598 @name=nil, @attributes=#<Net::SFTP::Protocol::V04::Attributes:0x4f6d5c8 @attributes={:type=>1}>>"

或者(从大量包含文件名的困惑(八进制?)数据中剪辑出来的):

"#<Net::SFTP::Protocol::V04::Name:0x4f6d778@name="inistrators@BUILTIN\000\000\000\027domain users@POSTNTRACK\000\000\001\200\000\000\000\000X\201\031)\000\000\000\000XE\252\312\000\000\000\000X\201\031)\000\000\000\b\000\000\000\031MVP20170106-238682954.999\000\000\002\275\001\000\000\000\000\000\000\001K\000\000\000\026Administrators@BUILTIN\000\000\000\027domain users@POSTNTRACK\000\000\001\200\000\000\000\000X~z\366\000\000\000\000X~z\366\000\000\000\000Xo\373=\000\000\000\000\000\000\000'MVP20170106-238682954.HTML\000\000\002\275\001\000...."

此输出来自代码(简化):

require 'net/sftp'
require 'net/ssh'
Net::SSH.start(@site,@user,:password =>@pass) do |session|
session.sftp.connect do |sftp|
sftp.dir.foreach('/Download') do |file|
next if (file.name == '..' || file.name == '.')
next if !file.file?
p file

这应该很简单,但我已经研究这个问题好几个星期了; 请帮助提供信息,指出我哪里出错了,或者这可能是 SFTP 端的问题吗?尝试过包含或不包含 SSH session

最佳答案

服务器实现了 SFTP 版本 5。这很不寻常。大多数 SFTP 服务器(特别是 OpenSSH)仅支持版本 3。因此,该协议(protocol)的新版本很少被使用,而且它们的实现存在错误(因为没有经过适当的测试)的情况并不罕见。这里似乎是这样的情况。 SFTP 版本 5 的 Ruby 实现可能是错误的。

您可以在 sftp/session.rb 中使用 HIGHEST_PROTOCOL_VERSION_SUPPORTED=3 强制使用较低版本的协议(protocol)。似乎没有办法在每个 session 的基础上更改版本。不过,该更改不太可能破坏您的其他 session ,因为它们很可能使用版本 3。

关于ruby - 连接到 SFTP 版本 5 时,Ruby 文件名损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42124883/

相关文章:

java - 如何在 selenium webdriver 中将值从一个测试用例传递到另一个测试用例

php - 使用 PHP 的安全 FTP 连接

ruby-on-rails - 模拟时遇到问题 `Resolv::DNS.open`

ruby - Ruby `uniq` 方法使用什么进行相等性检查?

ruby - 为什么会出现 Net::SMTPSyntaxError?

Android Gradle 'versionCode' 未从环境变量中读取

ruby - sinatra 应用程序不会在运行时启动

automation - html 报告未使用 --reporter 选项生成

python - paramiko sftp.get

amazon-web-services - 使用 S3 作为存储的 FTP 服务器