2017-02-08 1 views
1

SFTP接続からファイルを処理する新しいRuby自動化スクリプトを作成しているうちに、ファイル名の抽出に問題があります。 これらの同じ正確な方法を使用して私は積極的に使用されているし、多くの問題を抱えていない自動sftpスクリプトを構築しましたが、私はこのsftpセットアップでファイルの利用可能なファイル名を出力するように見えません。SFTPバージョン5に接続したときにRubyでファイル名が壊れた

私はファイルをアップロードすることができ、ファイルをダウンロードするためにパス/ファイル名でハードコードできるので、sftp接続が正常であることを知っています。 私の問題は、特にファイルの名前を読み取っているようです。典型的な方法を使用して

、私はファイル名のみが含まれないファイルオブジェクトまたはごちゃ混ぜテキストの塊のように見えるものの出力を得るように見えることができます:

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

やごちゃ混ぜの質量から(クリップ(8進数?)データのファイル名が含まれていない):

"#<Net::SFTP::Protocol::V04::Name:[email protected]="[email protected]\000\000\000\027domain [email protected]\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\[email protected]\000\000\000\027domain [email protected]\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セッションの有無にかかわらず試しました

+0

'file.name'を印刷するとどうなりますか? –

+0

print file.nameを使用すると、出力が乱れてしまいますが、8進コードに文字を割り当てようとしたようです: 'inistrators @ BUILTIN↨domusers @ POSTNTRACK☺ÇXü↓)XE╩Xü↓)↓20170106-2682954.999☻╜☺ ☺K▬管理者@ BUILTIN↨ドメインユーザー@ POSTNTRACK☺ÇX〜z÷X〜z÷Xo√= 'M20170106-2382954_SUMMARY_5010.HTML☻╜☺0 /▬管理者@ BUILTIN↨ドメインユーザー@ POSTNTRACK☺ÇX〜z≈ X〜z≈Xo√>↓MVP270111-238912517.999☻╜☺☺Q▬管理者@ BUILTIN↨ドメインユーザー@ POSTNTRACK☺ÇX〜z÷X〜z÷Xvôt'20170111-238912517_SUMMARY_50.HTML ' –

+0

あなたはWinSCPのようなスタンドアロンのSFTPクライアントを使用して接続しますか? - 私たちのログを見せてください。 –

答えて

1

サーバはSFTPバージョン5を実装しています。これはまれです。ほとんどのSFTPサーバー(特にOpenSSH)はバージョン3のみをサポートしています。そのため、新しいバージョンのプロトコルはほとんど使用されず、実装がバグであることも珍しくありません(正しくテストされていないため)。ここには何があるようです。 SFTPバージョン5のRuby実装はおそらく間違っています。

HIGHEST_PROTOCOL_VERSION_SUPPORTED=3sftp/session.rbに設定すると、プロトコルの下位バージョンを強制的に使用できます。セッションごとにバージョンを変更する方法はないようです。とにかくバージョン3を使用している可能性が高いため、変更によって他のセッションが中断されることはほとんどありません。

+0

優れていて、これは私を怒らせています。 sftp/session.rbを使って確実に他のスクリプトをテストしますが、あなたの内訳には自信があります。もう一度ありがとう! –

関連する問題