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

连接到SFTP版本5时,Ruby文件名已损坏,ruby,automation,sftp,Ruby,Automation,Sftp,在构建一个新的ruby自动化脚本来处理来自sftp连接的上下文件时,我在提取文件名时遇到了问题。 使用这些完全相同的方法,我构建了自动的sftp脚本,这些脚本正在被积极使用,并且没有太多问题,但是我似乎无法在这个sftp设置中输出可用的文件名 我知道sftp连接很好,因为我可以上传文件,并且可以硬编码路径/文件名来下载文件。 我的问题似乎特别在于读取文件名 使用典型的方法,我似乎只能得到似乎是文件对象或大量混杂文本的输出,其中包括文件名: "#<Net::SFTP::Protocol::V

在构建一个新的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...."

这应该很简单,但我已经研究这个问题好几个星期了请帮助提供信息,指出我的错误所在,或者这可能是SFTP方面的问题吗?已尝试使用和不使用SSH会话

服务器实现SFTP版本5。这很不寻常。大多数SFTP服务器(尤其是OpenSSH)只支持版本3。由于这个原因,协议的较新版本很少使用,而且它们的实现有缺陷(因为没有经过适当的测试)也并不少见。这里的情况似乎是这样的。SFTP版本5的Ruby实现可能是错误的


您可以使用
sftp/session.rb
中的
HIGHEST\u protocol\u version\u SUPPORTED=3
强制协议的较低版本。似乎没有办法在每次会话的基础上更改版本。不过,该更改不太可能中断您的其他会话,因为它们很可能使用版本3。

如果打印
file.name
,您会得到什么?使用print file.name,我会得到混乱的输出,但看起来它试图将字符分配给八进制代码:'inistrators@BUILTIN ↨领域users@POSTNTRACK ☺ÇXü↓) XE╩ 吕↓) ↓20170106-2682954.999 ☻╜☺ ☺K▬Administrators@BUILTIN ↨领域users@POSTNTRACK ☺ÇX~z÷X~z÷Xo√= 'M20170106-2382954_摘要_5010.HTML☻╜☺ 0/ ▬Administrators@BUILTIN ↨领域users@POSTNTRACK ☺玟X~z≈ X~z≈ Xo√> ↓MVP270111-238912517.999☻╜☺ ☺Q▬Administrators@BUILTIN ↨领域users@POSTNTRACK ☺∗X~z÷X~z÷Xvôt'20170111-238912517_SUMMARY_50.HTML'当您使用独立的SFTP客户端(如WinSCP)进行连接时,您会得到什么?-显示它的日志。使用WinSCP或FileZilla登录似乎很好,文件名看起来不错,我可以很好地进行交互。虽然当我认为这最初是一个权限问题,并询问他们的支持时,他们确实回答说“我们有一些客户在使用WinSCP时遇到问题。”日志文件可用,我是说WinSCP的日志文件。太好了,这让我发疯了。我将测试使用sftp/session.rb的其他脚本,以确保安全,但我对您的故障很有信心。再次感谢你!
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