任何人都可以在Ruby 1.9.3下使用FTPS/FTP::TLS



我试过几个宝石,例子等,不能得到这个工作,更有前途的宝石是:double-bag-ftps和FTPFXP,我可以连接,但我不能传输文件,在主动或被动模式。

ftpfxp示例代码:

@conn2 = Net::FTPFXPTLS.new
@conn2.passive = true
@conn2.debug_mode = true
@conn2.connect('192.168.0.2', 990)
@conn2.login('myuser2', 'mypass2')
@conn2.chdir('/')
@conn2.get("data.txt")
@conn2.close

双包示例代码:

ftps = DoubleBagFTPS.new
ftps.ssl_context = DoubleBagFTPS.create_ssl_context(:verify_mode => OpenSSL::SSL::VERIFY_NONE)
ftps.connect('192.168.0.2')
ftps.login('myuser2', 'mypass2')
ftps.chdir('/')
ftps.get("data.txt")
ftps.close 

双袋取样误差:

~/.rbenv/versions/1.9.3-p385/lib/ruby/gems/1.9.1/gems/double-bag-ftps-0.1.0/lib/double_bag_ftps.rb:148:in `connect': Broken pipe - SSL_connect (Errno::EPIPE)

ftpfxp的错误示例:

~/.rbenv/versions/1.9.3-p385/lib/ruby/1.9.1/net/ftp.rb:206:in `initialize': No route to host - connect(2) (Errno::EHOSTUNREACH)

有没有不涉及外部命令的建议?

谢谢。

我已经解决了这个问题,服务器正在返回一个私有ip地址,同时试图以显式tls被动模式连接,所以我添加了一行到Double-Bag-FTPS检查返回的ip是否私有回退到原始的公共ip地址…

GitHub Pull request

所以如果有人有同样的问题,也许这就是答案,希望这可以帮助别人:)